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
这有帮助吗?