我有表xyz,我有13列,即emplid,jan,feb ... dec。 这里我的数据如下
EMPLID JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC
123 0 0 0 0 0 5 5 2 6 0 0 0
456 0 2 3 0 0 0 5 5 3 0 0 0
789 5 0 0 5 0 5 0 5 6 3 0 4
ABC 4 5 0 5 5 0 5 0 6 0 0 0
现在我需要编写一个查询,以便在第一个月输出一些数据而不是0 例如:如果我检查EMPLID 123,我应该输出为JUN(因为JUN是此EMPLID的第一个月,其中数据不是0) 同样地,对于456,它将是FEB,对于789而ABC是它的JAN。
答案 0 :(得分:2)
正如 Philipp 在评论中所说,你的表格结构肯定是要改变的。另外,你将来会遇到很多类似的问题..
要回答你的问题,你可以试试这个:
select case when JAN > 0 then 'JAN'
when FEB > 0 then 'FEB'
when MAR > 0 then 'MAR'
when APR > 0 then 'APR'
when MAY > 0 then 'MAY'
when JUN > 0 then 'JUN'
when JUL > 0 then 'JUL'
when AUG > 0 then 'AUG'
when SEP > 0 then 'SEP'
when OCT > 0 then 'OCT'
when NOV > 0 then 'NOV'
when DEC > 0 then 'DEC'
end as Month
from xyz
where EMPLID='456'
答案 1 :(得分:1)
首先,我建议像Philipp提到的那样进行重构: 使用这样一个表:
EMPLID MONTH VALUE
123 1 3
123 12 5
在这种情况下,它更容易查询:
SELECT [MONTH]
FROM YourTable
GROUP BY EMPLID, [MONTH]
HAVING VALUE > 0
AND MIN([MONTH]) = [MONTH]
如果您没有其他选择使用案例:
SELECT
CASE
WHEN JAN > 0 THEN 'JAN'
WHEN FEB > 0 THEN 'FEB'
WHEN MAR > 0 THEN 'MAR'
WHEN APR > 0 THEN 'APR'
WHEN MAY > 0 THEN 'MAY'
WHEN JUN > 0 THEN 'JUN'
WHEN JUL > 0 THEN 'JUL'
WHEN AUG > 0 THEN 'AUG'
WHEN SEP > 0 THEN 'SEP'
WHEN OCT > 0 THEN 'OCT'
WHEN NOV > 0 THEN 'NOV'
WHEN DEC > 0 THEN 'DEC'
ELSE 'No Month found'
END AS FirstMonth
FROM YourTable
答案 2 :(得分:0)
正如菲利普所说,最好为你的桌子使用不同的结构。 使用当前结构,您可以执行以下操作:
Select a.EMPLID, case when (select b.JAN from tbl b where a.EMPLID=b.EMPLID) > 0 then 'JAN'
when.....etc(the same for each month).... end as Val
from tbl a
可能这不是最佳解决方案,但应该有效。