多行的SQL Pivot…混淆了吗?

多行的SQL Pivot…混淆了吗?,sql,tsql,pivot,pivot-table,Sql,Tsql,Pivot,Pivot Table,好的,我已经有一段时间没有使用SQL了。这是我得到的最深入的信息。基本上,我有一个方法来透视一张表,然后根据日期将其拆分 现在我有一笔交易要处理。有3种交易类型。比如说交付、装运、退回。因此,我的表具有事务ID、事务日期和事务类型。我需要对其进行透视,然后计算事务类型的总和。到目前为止,我有以下代码: SELECT SUM(Delivered), SUM(Shipped), SUM(Returned), TransactionID, Transaction

好的,我已经有一段时间没有使用SQL了。这是我得到的最深入的信息。基本上,我有一个方法来透视一张表,然后根据日期将其拆分

现在我有一笔交易要处理。有3种交易类型。比如说交付、装运、退回。因此,我的表具有事务ID、事务日期和事务类型。我需要对其进行透视,然后计算事务类型的总和。到目前为止,我有以下代码:

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。)

问题是我需要列。所以,不要按他们的顺序。我需要在2010年1月发货、交付、退货,然后在2010年2月发货、交付、退货。所有这些都需要订购。那么,每年/每月需要三列,每笔交易需要一行?(如果您添加一个“最终结果应与此类似”的示例,则会有所帮助。)