【发布时间】:2018-09-11 09:19:03
【问题描述】:
如何查询这些图片的结果。 第一列选择是本月加上下一列按条件字段 (SelectColumn)
黄色背景是 sum 的选择列
我的示例代码。
declare @myDate date = getdate(),@qry varchar(max)
set @qry = 'select case v.SelectColumn
when 0 then (SELECT '+DATENAME(month,@myDate)+')
when 2 then (SELECT '+DATENAME(month,@myDate)+'+'+DATENAME(MONTH,DATEADD(MONTH,1,@myDate))+')
when 1 then (SELECT '+DATENAME(month,@myDate)+'+'+DATENAME(MONTH,DATEADD(MONTH,1,@myDate))+'+'+DATENAME(MONTH,DATEADD(MONTH,2,@myDate))+')
end
as SumColumn
from vwQC12Month v'
exec (@qry)
【问题讨论】:
-
这是一个有趣的问题。不需要大量 CASE 语句的适当解决方案需要使用 UNPIVOT 将月份列旋转成行,然后对其进行聚合。
-
除了 0,2,1 看似错误的方式(应该是 0,1,2)之外,查询构建和执行正确,那么问题是什么?
-
@P.Salmon 如果情况是 7 或更多。我是否需要添加很多案例结果 (SELECT '+DATENAME(month,@myDate).... 我认为是一种无效的方法
-
使用您现有的方法,您将不得不添加很多案例语句。在我看来,如果您对它的工作感到满意,它是可维护的,符合您获得的规范和资源并且执行可接受,那么它是一种有效的方法。话虽如此,在确定解决方案之前,我会将您的方法与 unpivot/pivot 方法(我认为更容易理解)进行性能比较。
标签: mysql sql-server sql-server-2008