[英]Query to get column name and value
我有一个看起来像这样的表:
emplid year JAN FEB MAR APR MAY
------ ---- --- --- --- --- ---
1234 2018 x x x Retire
5678 2018 x Terminated
9876 2018 x x x x Transfer
5432 2018 x x x x x
我想返回一个看起来像这样的表:
emplid year month Reason
------ ---- ----- ------
1234 2018 APR Retire
5678 2018 FEB Terminated
9876 2018 MAY Transfer
基本上,我想查找员工退休,辞职,被解雇等的年月,以及原因。 反正有做到这一点吗? 我正在使用ms sql服务器。 如果您需要其他任何信息,请告诉我。 我不知道该怎么做。 超越了我的专业水平。 谢谢
有一个非常方便的地方可以使用APPLY
:
select t.empid, t.year, v.mon, v.reason
from t cross apply
(values ('JAN', jan), ('FEB', feb), ('MAR', mar), ('APR', apr), ('MAY', may)
) v(mon, reason)
where reason <> 'x';
下面的查询将剩余的几个月从6月扩展到12月
SELECT emplid,year,
CASE WHEN JAN <> 'x' THEN 'JAN'
WHEN FEB <> 'x' THEN 'FEB'
WHEN MAR <> 'x' THEN 'MAR'
WHEN APR <> 'x' THEN 'APR'
WHEN MAY <> 'x' THEN 'MAY'
--Rest of months
END [month],
REPLACE(JAN+FEB+MAR+APR+MAY,'x','') Reason
FROM tableName
您的表只是未规范化,但是...您可以使用:
select emplid, year,
case
when not (JAN = 'x')
then 'JAN'
when not (FEB = 'x')
then 'FEB'
as month
和相同的原因。
试试这个
select t1.emplid,t1.year,
(
CASE
WHEN t1.JAN <> 'x' AND t1.JAN <> '' THEN 'JAN'
WHEN t1.FEB <> 'x' AND t1.FEB <> '' THEN 'FEB'
WHEN t1.MAR <> 'x' AND t1.MAR <> '' THEN 'MAR'
WHEN t1.APR <> 'x' AND t1.APR <> '' THEN 'APR'
WHEN t1.MAY <> 'x' AND t1.MAY <> '' THEN 'MAY'
end
) as month,
(
CASE
WHEN t1.JAN <> 'x' AND t1.JAN <> '' THEN t1.JAN
WHEN t1.FEB <> 'x' AND t1.FEB <> '' THEN t1.FEB
WHEN t1.MAR <> 'x' AND t1.MAR <> '' THEN t1.MAR
WHEN t1.APR <> 'x' AND t1.APR <> '' THEN t1.APR
WHEN t1.MAY <> 'x' AND t1.MAY <> '' THEN t1.MAY
end
) as Reason
from table1 t1
where Reason is not null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.