我必须在一个报表中获取并显示每月数据,当前我正在使用CASE函数来获取基于月份的值。还有其他功能可以使我的查询更加优化
select MONTH(sale_date) AS MOIST,CASE WHEN MONTH(sale_date) = 1 THEN A
WHEN MONTH(sale_date) = 2 THEN B
WHEN MONTH(sale_date) = 3 THEN C
WHEN MONTH(sale_date) = 4 THEN D
else E
END as value
有什么理由让它变得更加简单和优化
答案 0 :(得分:3)
您可以为1969-12-31 22:55:00
使用替代语法:
case
您也可以使用select MONTH(sale_date) AS MOIST,
(CASE MONTH(sale_date)
WHEN 1 THEN A
WHEN 2 THEN B
WHEN 3 THEN C
WHEN 4 THEN D
ELSE E
END) as value
:
OUTER APPLY
或select month(sale_date),
coalesce(v.val, E)
from . . . outer apply
(select val
from (values (1, A), (2, B), (3, C), (4, D)
) v(mon, val)
where v.mon = month(sale_date)
) v
:
LEFT JOIN
答案 1 :(得分:2)
如果您的意思是“ A”,“ B”,“ C”,“ D”,则:
select MONTH(sale_date) AS MOIST,CASE WHEN MONTH(sale_date) <= 4 THEN CHAR(MONTH(sale_date) + 64)
else E
END as value
如果这些值是其他值,您可以找到上述便捷的模式,请使用它。如果不是,则实现一个存储的函数,该函数以1、2、3或4作为参数并返回正确的值,例如:
select MONTH(sale_date) AS MOIST,CASE WHEN MONTH(sale_date) <= 1 THEN myFunction(sale_date)
else E
END as value
甚至:
select MONTH(sale_date) AS MOIST,myFunction(sale_date) as value