用于绘制数据输出的sql交叉表

时间:2016-03-31 13:04:07

标签: sql-server

我正在尝试获取数据的交叉表,以便列是一年中的几个月,而行数是根据当月销售的价值计算的年份。

因此:

year jan feb mar apr等 2014 0 1 5 9 2015 11 12 0 14

使用这个SQL - (原谅粗俗)

new MyClass('myname');

(我为了简洁起见缩短了代码,但其他几个月的格式相同)

当我运行它时,多年来我得到多行,每个月都有一个值的条目,其余的作为空值......例如。

year jan feb mar apr等 2014年1月1日至今 2014 6 nul nul nul 2014年nul nul 7 nul

我做错了什么?

1 个答案:

答案 0 :(得分:0)

所有排序都是在查看数据透视示例后的几个小时内重写查询。

SELECT * from 
(select year(fsivho.InvoiceDate) as Yr, cast(datename(MONTH     ,fsivho.InvoiceDate) as CHAR(3)) as Mth,
cast(fsivlo.ShipQuantity * fsivlo.InvoiceLocalUnitPrice as decimal(8,2)) as Value
from ARInvoiceLine fsivlo , ARInvoiceHeader fsivho
where fsivlo.HeaderKey = fsivho.HeaderKey
and fsivho.InvoiceType = 'I'
and year(fsivho.InvoiceDate) >= year(DATEadd(yyyy, -4, GETDATE()))) src
PIVOT
(sum(Value)
for Mth in ([Jan],[Feb],[Mar],[Apr],[May],[Jun],[Jul],[Aug],[Sep],[Oct],[Nov],[Dec])) as pvt
order by Yr;

所以现在有多年的行数,在顶部有数月,价值在正确的位置!