考虑此表:
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
如何根据c5
,c6
和c7
列查询所有行,并且c1
上c2
上的所有行都具有相同的值至少有一个前面行的{}},c3
和c4
。
例如,如果我想在c5 = 006
,c6 = 1002
和c7 = 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
最后一行也被选中,因为c1
,c2
,c3
和c4
的值与第3行相同。
我考虑过使用EXISTS条款,但我真的不知道如何继续。
答案 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)