vol*_*one 0 sql sql-server sql-server-2012
我有一张包含汽车信息的表格 dbo.Car
CarID | Make | Model
23 Volvo XC90
40 Chevrolet Camaro
46 BMW Z4
Run Code Online (Sandbox Code Playgroud)
还有另一个表,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
Run Code Online (Sandbox Code Playgroud)
数据在这个表中意味着什么并不重要.但是,我想加入的CarID,只返回1行中具有的最高值Dist从列dbo.CIS时CarID似乎比在表一次表.
所以对于CarID 23我想要归还:
CarID | Make | Model | CarID | Dist | U1 | U2 | U3 | U4 | U5 -- U22
23 Volvo XC90 23 1170 68 93 24 23 19 93
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过这样做不起作用(我仍然从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
Run Code Online (Sandbox Code Playgroud)
如何只返回包含Car表中信息的1行(顺便说一下,它没有重复项)和CIS可能有重复信息的表或根本没有给定信息的表CarID.我想从存在重复项时列具有最高值的CIS表中返回数据Dist.
我应该补充一点,这只是一个涉及许多表和连接的相当大的SQL查询的片段.因此,我需要在同一个查询中使用任何解决方案而不是单独创建临时表.
这是利用这种方法的一种方法ROW_NUMBER.
with myCte as
(
select ROW_NUMBER() over(partition by CarID order by Dist desc) as RowNum
, CarID
, Dist
, U1
, U2
from CIS
)
select * --Your column names here
from Car c
join myCte cis on c.CarID = cis.CarID and cis.RowNum = 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
183 次 |
| 最近记录: |