【发布时间】:2015-02-15 13:16:48
【问题描述】:
我有两张表,一张名为 Car,一张名为 Mileage。汽车表有以下列:CarName varchar(max)
里程表有以下列:CarMileage int
CarName varchar(max)
TotalGasTrips int
我的代码如下:
SELECT DISTINCT y.CarName,
Substring((SELECT ', ' + Cast(c.MPG AS VARCHAR(max))
FROM Mileage
JOIN Car
ON Mileage.CarName = Car.CarName
WHERE Mileage.CarName = Car.CarName
FOR xml path ('')), 2, 1000) AS MPGString
FROM Car y
INNER JOIN (SELECT w.CarName,
CarMileage / TotalGasTrips AS MPG
FROM Mileage w
GROUP BY w.CarName,
w.CarMileage,
w.TotalGasTrips)c
ON y.CarName = c.CarName
GROUP BY c.MPG,
y.CarName
查询结果为:
CarName MPGString
Acura NSX 20,20,20,20
Acura NSX 42,42,42,42
Pagani Zonda 24,24,24,24
Pagani Zonda 43,43,43,43
我想要的结果是:
CarName MPGString
Acura NSX 20,42
Pagani Zonda 24,43
是否可以从别名计算列中获得我想要的正确连接行?我试着到处寻找,我发现的只是来自已经有现有值的列的连接,而不是来自计算列的连接。感谢您的帮助。
编辑:
两个表具有相同的汽车名称(在本例中为 Acura NSX 和 Pagani Zonda)。为了测试字符串连接,我为相同的两辆车指定了 TripGasTrips 和 CarMileage 的不同编号。 Mileage 表中的示例如下:Acura NSX 125471,6172
Acura NSX 213776,5000
Pagani Zonda 166793, 6911
Pagani Zonda 315531 7312
列分别为 CarName、CarMileage 和 TotalGasTrips
在汽车表中,我有以下内容:Acura NSX
Pagani Zonda
CarName 是该表的唯一列。
编辑:
c表的输出如下:
CarName MPG
Acura NSX 20
Acura NSX 42
Pagani Zonda 24
Pagani Zonda 43
【问题讨论】:
-
Ctable 的输出是什么 -
@NoDisplayName 将c表的结果编辑成问题。
-
您的
carname列在car表中的值是否不同 -
是的,值是不同的
标签: sql-server substring concatenation calculated-columns sql-server-2008