我有一个包含多个具有ID的列的表,我需要从匹配的任何一列获取信息。
tblA
colA | colB | colC | colD
1 5 6 7
2 5 5 8
3 7 8 9
4 8 8 9
有没有办法我可以选择列A,其中列b,列c和列d都等于一个数字但是将它们保留在列中?
基本上,如果我正在寻找" 5"在表b,c和d列中它将返回以下内容:
colB | colC | colD
1 2
2
答案 0 :(得分:1)
这是否涵盖了您的预期结果?
create table tblA(id int, colA int, colB int, colC int, colD int); insert into tblA values (1, 1, 5, 6, 7), (2, 2, 5, 5, 8), (3, 3, 7, 8, 9), (4, 4, 8, 8, 9); GO
4 rows affected
select sum(iif(colA=5, 1, 0)) over (order by id) colA, sum(iif(colB=5, 1, 0)) over (order by id) colB, sum(iif(colC=5, 1, 0)) over (order by id) colC, sum(iif(colD=5, 1, 0)) over (order by id) colD from tblA where colA=5 or colB=5 or colC=5 or colD=5; GO
colA | colB | colC | colD ---: | ---: | ---: | ---: 0 | 1 | 0 | 0 0 | 2 | 1 | 0
dbfiddle here
答案 1 :(得分:1)
如果你不介意这样的结果:
colB | colC | colD
1 NULL NULL
2 2 NULL
这个查询可以解决数字5:
SELECT CASE WHEN colB = 5 THEN ColA ELSE NULL END as colB,
CASE WHEN colC = 5 THEN ColA ELSE NULL END as colC,
CASE WHEN colD = 5 THEN ColA ELSE NULL END as colD
FROM YourTable yt
WHERE yt.colB = 5 OR yt.colC = 5 OR yt.colD = 5
现在,如果你想在第一行中使用colC中的那个2,我就不知道如何将它放在那里,抱歉。