选择多列匹配的单个列。

时间:2018-02-24 16:03:33

标签: sql-server

我有一个包含多个具有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

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,我就不知道如何将它放在那里,抱歉。