我正在尝试获取数据的交叉表,以便列是一年中的几个月,而行数是根据当月销售的价值计算的年份。
因此:
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
等
我做错了什么?
答案 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;
所以现在有多年的行数,在顶部有数月,价值在正确的位置!