SQL选择列值等于Yes的列标题

SQL选择列值等于Yes的列标题,sql,tsql,Sql,Tsql,我有一些遗留软件,它在SQL中显示数据的方式非常陈旧 基本上,我有一个带有标签的数据输入屏幕,每个屏幕上都有一个是/否框,在SQL中,最后有一列表示字段,然后结果值就是这个是/否框的答案 我的例子 B@ | PolRef@ | HH01 | HH02 | HH03 | HH04 0 | LYJX01 | Yes | No | No | Yes 0 | POMS01 | No | No | No | Yes 大约有72个是/否框 如果该行上的值等于“Yes”,我基本

我有一些遗留软件,它在SQL中显示数据的方式非常陈旧

基本上,我有一个带有标签的数据输入屏幕,每个屏幕上都有一个是/否框,在SQL中,最后有一列表示字段,然后结果值就是这个是/否框的答案

我的例子

B@ | PolRef@ | HH01 | HH02 | HH03 | HH04 
0  | LYJX01  |  Yes |  No  |  No  | Yes
0  | POMS01  |  No |  No  |  No  | Yes
大约有72个是/否框

如果该行上的值等于“Yes”,我基本上需要该“PolRef@”的返回列的名称

我开始写以下内容

SELECT hqe1.B@ , hqe1.PolRef@ , CASE WHEN hqe1.Hh01 = 'Yes' THEN 'HH01' END AS [Endorsement] FROM dbo.ic_BD_HQE1 hqe1
WHERE CASE WHEN hqe1.Hh01 = 'Yes' THEN 'HH01' END IS NOT NULL
UNION
SELECT hqe1.B@ , hqe1.PolRef@ , CASE WHEN hqe1.Hh02 = 'Yes' THEN 'HH02' END AS [Endorsement] FROM dbo.ic_BD_HQE1 hqe1
WHERE CASE WHEN hqe1.Hh02 = 'Yes' THEN 'HH02' END IS NOT NULL
ORDER BY hqe1.PolRef@
但肯定有更快的方法吗


有人能帮忙吗?

您可以使用
unpivot
来完成此操作

select B@ , PolRef@, endorsement
from
(select * from hqe1) t
unpivot
(col for endorsement in (HH01,HH02,HH03,HH04)) u
where col = 'Yes'

非常感谢vkp!:)