【发布时间】:2015-06-28 01:45:34
【问题描述】:
我有一张包含汽车信息的表格dbo.Car
CarID | Make | Model
23 Volvo XC90
40 Chevrolet Camaro
46 BMW Z4
还有另一个表格dbo.CIS,其中列出了其他信息。它是这样的:
CarID | Dist | U1 | U2 | U3 | U4 | U5 -- U22
23 180 65 94 80 56 88 71
23 1170 68 93 24 23 19 93
40 908 89 15 68 46 59 31
46 500 10 20 30 40 50 35
46 2300 60 62 44 52 75 99
其他表中数据的含义并不重要。但是我想加入CarID,并且当 CarID 在该表中多次出现时,仅返回 Dist 列中具有最高值的 1 行来自 dbo.CIS 表。
所以对于 CarID 23,我想返回这个:
CarID | Make | Model | CarID | Dist | U1 | U2 | U3 | U4 | U5 -- U22
23 Volvo XC90 23 1170 68 93 24 23 19 93
到目前为止,我已经尝试过这样做,但它不起作用(我仍然从 dbo.CIS 表中获取两行)
SELECT
c.CarID,
c.Make,
c.Model,
cis.U1,
cis.U2,
cis.U3,
cis.U4,
cis.U5
....
cis.U22
FROM
dbo.Car c
LEFT JOIN
(SELECT
MAX(Dist) AS Dist,
U1,
U2,
U3,
U4,
U5
...
U22
FROM dbo.CIS
GROUP BY
U1,
U2,
U3,
U4,
U5
...
U22
) AS cis
ON
cis.CarID = c.CarID
WHERE c.CarID = 23
我怎样才能只返回 1 行,其中包含来自 Car 表(顺便说一下没有重复)和 CIS 表中的信息,对于给定的@987654333,它可以有重复信息或根本没有信息@。我想从CIS 表中返回数据,当存在重复项时,Dist 列的值最高。
我应该补充一点,这只是一个涉及许多表和连接的更大 SQL 查询的 sn-p。因此,我需要任何解决方案来坐在同一个查询中,而不是单独创建临时表。
【问题讨论】:
-
有人早些时候发布了一个使用 OUTER APPLY 的解决方案,这似乎对我有用。但他不知道为什么删除了那个答案。
-
您最终使用了
OUTER APPLY解决方案吗?如果您这样做了,您可能希望将其添加为答案并接受它,如果它比下面肖恩的答案更好。
标签: sql sql-server sql-server-2012