2013-09-21 113 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]