繁体   English   中英

查询以获取列名和值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM