我有一些遗留软件,它具有在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@
但肯定有更快的方法吗?
任何人都可以提供帮助吗?
答案 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'