多行的SQL Pivot…混淆了吗?
好的,我已经有一段时间没有使用SQL了。这是我得到的最深入的信息。基本上,我有一个方法来透视一张表,然后根据日期将其拆分 现在我有一笔交易要处理。有3种交易类型。比如说交付、装运、退回。因此,我的表具有事务ID、事务日期和事务类型。我需要对其进行透视,然后计算事务类型的总和。到目前为止,我有以下代码:多行的SQL Pivot…混淆了吗?,sql,tsql,pivot,pivot-table,Sql,Tsql,Pivot,Pivot Table,好的,我已经有一段时间没有使用SQL了。这是我得到的最深入的信息。基本上,我有一个方法来透视一张表,然后根据日期将其拆分 现在我有一笔交易要处理。有3种交易类型。比如说交付、装运、退回。因此,我的表具有事务ID、事务日期和事务类型。我需要对其进行透视,然后计算事务类型的总和。到目前为止,我有以下代码: SELECT SUM(Delivered), SUM(Shipped), SUM(Returned), TransactionID, Transaction
SELECT
SUM(Delivered),
SUM(Shipped),
SUM(Returned),
TransactionID,
TransactionDate
FROM
(
(SELECT
TransactionID,
TransactionDate,
TransactionType
FROM Transactions) AS Ttable
PIVOT
(
COUNT(TransactionType)
FOR TransactionTYpe IN
(
[Delivered],
[Shipped],
[Returned]
)
) as Pvt1
)
这将获取每个事务类型的计数之和。然而,这给了我所有存在的交易类型的总数。我需要在一段时间内得到所有这些。例如(我知道这会有很多变量,但这是我的应用程序能够做到的唯一方法),我需要找出2010年1月至2012年12月每个月所有交易类型的总和。那么12x3。我怎么能这样把它拆散呢?请帮忙!快疯了 这里有一个起点:
SELECT TransactionMonth, [Delivered], [Shipped], [Returned]
from (select
TransactionType
,cast(datename(mm, TransactionDate) + ' 1, ' + datename(yy, TransactionDate) as smalldatetime) TransactionMonth
from Transactions) ByMonth
pivot (count(ByMonth.TransactionType)
for ByMonth.TransactionType in ([Delivered],[Shipped],[Returned] )
) xx
order by TransactionMonth
不完全清楚源数据是什么样子,或者最终网格应该是什么,所以我做了一些假设:
- 我假设每个TransactionId在一个日期有一个事务。我将其从最终查询中剔除,并按日历月生成总计
- 我返回表中每个条目的结果。将带有适当日期筛选参数的where子句添加到SELECT子句,以获得较少的数据
- 一定有更好的方法将日期时间“清理”成“年-月”形式,如果你找到了,就使用它
- 我在自己的simlar表上测试了这个,然后转换成了你的名字——我很确定我没弄错,但可能有一些拼写错误。(我使用的是SQL 2005。)