【问题标题】:Concatenating rows from an alias computed column连接别名计算列中的行
【发布时间】: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

【问题讨论】:

  • C table 的输出是什么
  • @NoDisplayName 将c表的结果编辑成问题。
  • 您的carname 列在car 表中的值是否不同
  • 是的,值是不同的

标签: sql-server substring concatenation calculated-columns sql-server-2008


【解决方案1】:

这对我有用(如果你提供一些数据来测试会更容易):

SELECT
  C.CarName,
  SUBSTRING((
             SELECT
              ', ' + CAST(CarMileage / TotalGasTrips AS VARCHAR(MAX))
             FROM
              Mileage
             WHERE
              Mileage.CarName = C.CarName
             GROUP BY
              dbo.Mileage.CarMileage,
              dbo.Mileage.TotalGasTrips
            FOR
             XML PATH('')
            ), 2, 1000) AS MPGString
FROM
  Car C
  JOIN dbo.Mileage M ON C.CarName = M.CarName
GROUP BY
  C.CarName

【讨论】:

  • 完美。这给了我想要的答案。
猜你喜欢
  • 1970-01-01
  • 2012-07-25
  • 2011-04-18
  • 2013-12-05
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多