【发布时间】:2016-11-10 23:07:57
【问题描述】:
我当前的 sql 查询需要过去 6 个月并选择销售额,就像这样
SUM(CASE WHEN ci.InvoiceDate >= '20160501' AND ci.InvoiceDate <= '20160531' THEN cid.QuantityOrdered ELSE 0 END) AS 'May',
SUM(CASE WHEN ci.InvoiceDate >= '20160601' AND ci.InvoiceDate <= '20160630' THEN cid.QuantityOrdered ELSE 0 END) AS 'June',
SUM(CASE WHEN ci.InvoiceDate >= '20160701' AND ci.InvoiceDate <= '20160731' THEN cid.QuantityOrdered ELSE 0 END) AS 'July',
SUM(CASE WHEN ci.InvoiceDate >= '20160801' AND ci.InvoiceDate <= '20160831' THEN cid.QuantityOrdered ELSE 0 END) AS 'August',
SUM(CASE WHEN ci.InvoiceDate >= '20160901' AND ci.InvoiceDate <= '20160930' THEN cid.QuantityOrdered ELSE 0 END) AS 'September',
SUM(CASE WHEN ci.InvoiceDate >= '20161001' AND ci.InvoiceDate <= '20161030' THEN cid.QuantityOrdered ELSE 0 END) AS 'October',
但是,当我在 12 月运行此报告时,因为我在月份名称中进行了硬编码,所以我不会得到 11 月的销售数据。
理想情况下,我想要某种形式的代码,可以动态生成最近 6 个月的选择查询。
这甚至可能吗?有没有人可以指点我了解更多关于动态 SQL 的文档?
谢谢大家!
【问题讨论】:
-
您需要这些作为列吗?还是行会起作用?
-
不,肯定需要它们作为列
-
您想要一个dynamic pivot,这在 SQL Server 中是可行的,但可能会很混乱。如果您可以在客户端工具(报告、表单、网页等)中执行此操作,则用于动态数据透视的 UI 工具通常更简洁、更容易。
-
SQL Server 的版本
标签: sql sql-server sql-server-2008-r2