2013-09-21 114 views
0

我有如下數據 TSQL決策不起作用

Id , TagNo , Revision 
100 , 20001 , A 
101 , 20001 , B 
102 , 20001 , C 
103 , 20002 , B 
104 , 20002 , A 
105 , 20003 , B 

我想如果我通過B中的修訂,我有如下記錄

101 , 20001 , B 
103 , 20002 , B 
105 , 20003 , B 

如果我通過了版本i應該有以下記錄

100 , 20001 , A 
104 , 20002 , A 

如果我通過下修訂下面列出的是我的結果

102 , 20001 , C 
103 , 20002 , B 
105 , 20003 , B 

我不能TSQL做到,任何機構可以幫助我嗎? 謝謝

+0

爲什麼修訂記錄不包括在請求B版本時? –

+0

@nnmmss您正在使用哪個數據庫? –

+3

我們真的不知道你在這裏要求什麼。如果你不能說得更清楚,這個問題可能會被關閉。 – RBarryYoung

回答

2
with cte as (
    select 
     Id, TagNo, Revision, 
     row_number() over(partition by TagNo order by Revision desc) as rn 
    from Table1 
    where Revision <= @Revision 
) 
select Id, TagNo, Revision 
from cte 
where rn = 1 

sql fiddle demo

0

你只是在尋找

select * from mytable where Revision = 'A' 

select * from mytable where Revision = 'B' 

select * from mytable where Revision = 'C' 
+0

感謝您的關注,這不是我正在尋找的,我希望根據修訂值我得到不同的,也有AZ調整 – nnmmss

0
;WITH TagGroups as 
(
    SELECT 
    [TagNo], 
    MAX([Revision]) as [Revision] 
    FROM Tags 
    WHERE [Revision] <= 'A' -- Revision for pass 
    GROUP BY [TagNo] 
) 
SELECT 
    t.[ID], 
    t.[TagNo], 
    t.[Revision] 
FROM TagGroups tg 
JOIN Tags t 
    ON t.[TagNo] = tg.[TagNo] 
    AND t.[Revision] = tg.[Revision] 
ORDER BY t.[ID]