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

时间:2016-03-31 12:28:31

标签: sql tsql

我有一些遗留软件,它具有在SQL中显示数据的极其古老的方式。

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

我的例子

B@ | PolRef@ | HH01 | HH02 | HH03 | HH04 
0  | LYJX01  |  Yes |  No  |  No  | Yes
0  | POMS01  |  No |  No  |  No  | Yes

大约有72个是/否框。

如果该行上的值等于“是”,我基本上需要'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@

但肯定有更快的方法吗?

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

您可以使用unpivot执行此操作。

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