Sql server 选择多列匹配的单列。

Sql server 选择多列匹配的单列。,sql-server,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列都等于一个数字,但将它们保留在各自的列中 基本上,如果我在表a的b、c和d列中查找“5”,它将返回以下内容: colB | co

我有一个表,它有多个具有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列都等于一个数字,但将它们保留在各自的列中

基本上,如果我在表a的b、c和d列中查找“5”,它将返回以下内容:

colB | colC | colD
1       2
2

这包括你的预期结果吗

可乐| colB | colC | colD ---: | ---: | ---: | ---: 0 | 1 | 0 | 0 0 | 2 | 1 | 0
dbfiddle

如果您不介意这样的结果:

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,我不知道如何把它放在那里,对不起。

盯着这个看了一点……不知道如何获得带有2的c列……可能需要更多解释吗?@Ctznkane525 colC中有5,因此,它会将可乐中的2退回colC@Joshm好的,但是为什么1和2在结果中出现在同一行中?@ypercubeᵀᴹ 我把它理解为一个秩()。@McNets如果它是一个秩,为什么我们在C列中看到只有一个5值的2(而不是1)?这个问题还不清楚。投票结束,直到编辑并澄清问题。
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
colB | colC | colD
1      NULL   NULL
2      2      NULL
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