Sql server 如何使用SQL2000透视/取消透视某些内容

Sql server 如何使用SQL2000透视/取消透视某些内容,sql-server,tsql,sql-server-2000,ssrs-2008,Sql Server,Tsql,Sql Server 2000,Ssrs 2008,我正在查询一个表,它实际上是一组日期 FRECDCUST DTRECDCUST DTINSPECTED DTRECDCUSTPO DTADDEDSO DTSHIPPEDSUP DTQUOTEDCUST 1/1/1900 12:00:00 AM 7/27/2010 12:00:00 AM 7/30/2010 12:00:00 A

我正在查询一个表,它实际上是一组日期

FRECDCUST              DTRECDCUST              DTINSPECTED             DTRECDCUSTPO           DTADDEDSO                 DTSHIPPEDSUP                  DTQUOTEDCUST
1/1/1900 12:00:00 AM    7/27/2010 12:00:00 AM   7/30/2010 12:00:00 AM   7/26/2010 12:00:00 AM   8/6/2010 12:00:00 AM    1/1/1900 12:00:00 AM    8/6/2010 12:00:00 AM
1/1/1900 12:00:00 AM    7/27/2010 12:00:00 AM   7/30/2010 12:00:00 AM   7/26/2010 12:00:00 AM   8/6/2010 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM
1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM
1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM
1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM    1/1/1900 12:00:00 AM
1/1/1900 12:00:00 AM    3/12/2010 12:00:00 AM   3/15/2010 12:00:00 AM   3/11/2010 12:00:00 AM   3/16/2010 12:00:00 AM   3/24/2010 12:00:00 AM   4/13/2010 12:00:00 AM
1/1/1900 12:00:00 AM    11/6/2009 12:00:00 AM   11/6/2009 12:00:00 AM   11/3/2009 12:00:00 AM   11/9/2009 12:00:00 AM   11/20/2009 12:00:00 AM  12/7/2009 12:00:00 AM
我在每行上取两个日期之间的日期差。例如,检查的天数如下所示:

SELECT (CASE
          WHEN year(SYC_ext.DTRECDCUST) <> 1900
               AND year(SYC_ext.DTINSPECTED) <> 1900
          THEN
            DATEDIFF(dd, SYC_ext.DTRECDCUST, SYC_ext.DTINSPECTED)
          ELSE
            NULL
        END)
         AS [AverageDaystoInspect]
Blah blah...
Product Class   Average Days to Inspect Average Days to Process SO  Average Days to Ship to Affiliate   Average Days to Quote   Average Days to Receive Ammended PO
01  2   4   8   27  21
01  2   4   8   27  21
01  3   5   2   88  8
01  3   5   2   88  8
01  1   8   11  72  1
01  3   2   7   27  0
01  5   2   7   27  0
请原谅间隔问题

因此,数据集中的每一行都以一个数字开始,该数字表示本例中的产品类别01,然后是一系列的日计算

我可以平均这些值,并为每个产品类别提供每个类别的平均值。然而,他们希望在表或矩阵的左侧计算日数,顶部是产品类,与我这里的正好相反。如果我在Excel中透视它们,我会得到以下结果:

                          01    05     10
Avg Days to Inspect       5      3      5
Avg Days to Process PO    4      5      5
Avg Days to Ship          20     18     19

我希望这是有道理的。知道我如何在SSRS或t-sql中执行此操作吗

假设您可以将第一个查询中的数据加载到一个中间临时表中,则可以这样做:

DECLARE @t TABLE
    (
      ProductClass INT
    , InspectDays INT
    , ProcessDays INT
    , ShipDays INT
    )

INSERT  INTO @t
        SELECT  1
              , 2
              , 4
              , 8
        UNION ALL
        SELECT  1
              , 4
              , 5
              , 2
        UNION ALL
        SELECT  5
              , 2
              , 4
              , 8
        UNION ALL
        SELECT  10
              , 3
              , 5
              , 2

SELECT  'Avg Inspect'
      , [01] = AVG(CASE WHEN ProductClass = 1 THEN InspectDays
                   END)
      , [05] = AVG(CASE WHEN ProductClass = 5 THEN InspectDays
                   END)
      , [10] = AVG(CASE WHEN ProductClass = 10 THEN InspectDays
                   END)
FROM    @t
UNION ALL
SELECT  'Avg Process'
      , [01] = AVG(CASE WHEN ProductClass = 1 THEN ProcessDays
                   END)
      , [05] = AVG(CASE WHEN ProductClass = 5 THEN ProcessDays
                   END)
      , [10] = AVG(CASE WHEN ProductClass = 10 THEN ProcessDays
                   END)
FROM    @t
这有帮助吗?