当一组列依赖于另一个组

时间:2016-09-26 07:45:18

标签: sql sql-server select

考虑此表:

c1       c2           c3         c4          c5       c6         c7
--------------------------------------------------------------------
006      1001        101         0           006     1002        1
006      1001        102         0           006     1002        1
006      1001        102         1           006     1002        1
006      1001        102         1           SVR     1002        1
006      1002        102         1           SVR     1003        1

如何根据c5c6c7列查询所有行,并且c1c2上的所有行都具有相同的值至少有一个前面行的{}},c3c4

例如,如果我想在c5 = 006c6 = 1002c7 = 1时获取所有行;结果应该是:

006      1001        101         0           006     1002        1
006      1001        102         0           006     1002        1
006      1001        102         1           006     1002        1
006      1001        102         1           SVR     1002        1

最后一行也被选中,因为c1c2c3c4的值与第3行相同。

我考虑过使用EXISTS条款,但我真的不知道如何继续。

2 个答案:

答案 0 :(得分:0)

我知道这可能不是最好的解决方案,我不确定这是你想要的,但我已经尝试过你的数据而且它有效:

select * 
from table
where convert(char, c1) + '$' + convert(char, c2) + 
    '$' + convert(char, c3) + '$' + convert(char, c4) in
        (select convert(char, c1) + '$' + convert(char, c2) + '$' +
             convert(char, c3) + '$' + convert(char, c4) as helperCol  
         from table where c5 like '006' and c6 = 1002 and c7 = 1)

使用$作为数据分隔符,假设数据中没有使用此字符,如果它应该更改为其他字符。

答案 1 :(得分:0)

您可以像这样使用exists子句:

-- select all records where the column c1-c4 are the same 
-- of some (exists) of the records that are in the "basic conditions" set
select * from MyTable where exists ( 
    select * from MyTable as S where c5 = '006' and c6 = '1002' and c7 = '1' 
    and S.c1=MyTable.c1 and S.c2=MyTable.c2 and S.c3=MyTable.c3 and S.c4=MyTable.c4)