Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
2005年SSRS/SQL Server PIVOT结果需要反转_Sql_Sql Server 2005_Reporting Services_Reportingservices 2005 - Fatal编程技术网

2005年SSRS/SQL Server PIVOT结果需要反转

2005年SSRS/SQL Server PIVOT结果需要反转,sql,sql-server-2005,reporting-services,reportingservices-2005,Sql,Sql Server 2005,Reporting Services,Reportingservices 2005,序言:我已经通读了三个问题/答案,并向@cade roux大献殷勤。这一切都源于试图在2005年SSRS矩阵中使用以下数据,我认为,这是行不通的,因为我想让一个成员参加多次测试,而SSRS似乎要求在我想显示所有日期的地方使用聚合 我在表格中得到以下结果,似乎正确显示了所有数据: 我如何更改下面的代码,以显示a)每列顶部的“测试”以及b)如果需要,测试的多个日期 这是我必须生成上表的代码。大部分内容都被注释掉了,因为我只是想让pivot工作,但您可能会注意到,我还试图指定哪个测试列首先出现

序言:我已经通读了三个问题/答案,并向@cade roux大献殷勤。这一切都源于试图在2005年SSRS矩阵中使用以下数据,我认为,这是行不通的,因为我想让一个成员参加多次测试,而SSRS似乎要求在我想显示所有日期的地方使用聚合

我在表格中得到以下结果,似乎正确显示了所有数据:

我如何更改下面的代码,以显示a)每列顶部的“测试”以及b)如果需要,测试的多个日期

这是我必须生成上表的代码。大部分内容都被注释掉了,因为我只是想让pivot工作,但您可能会注意到,我还试图指定哪个测试列首先出现

    CREATE TABLE #tmp (     ---THIS WORKS BUT TESTS ARE VERTICAL
    [TEST] [varchar](30) NOT NULL,
    [ED] [datetime] NOT NULL
)

--WHERE THE TEST AND ED COME FROM
INSERT #TMP
SELECT DISTINCT
--      N.FULL_NAME
--      , CONVERT(VARCHAR(30), AM.CREATEDATE, 101) AS ACCOUNT_CLAIMED
--      , N.EMAIL
--      , NULL AS 'BAD EMAIL'
--      , CONVERT(VARCHAR(30), AC.EFFECTIVE_DATE, 101) AS EFFECTIVE_DATE
         AC.PRODUCT_CODE AS TEST
        , CONVERT(VARCHAR(30), AC.EFFECTIVE_DATE, 101) AS ED
--      , CASE
--          WHEN AC.PRODUCT_CODE = 'NewMem_Test' THEN '9'
--          WHEN AC.PRODUCT_CODE = 'NM_Course1' THEN '1'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course1' THEN '2'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course2' THEN '3'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course3' THEN '4'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course4' THEN '5'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course5' THEN '6'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course6' THEN '7'
--          WHEN AC.PRODUCT_CODE = 'NMEP_Course7' THEN '8'
--      END AS 'COLUMN_ORDER'
    FROM NAME N
        JOIN USERMAIN UM
        ON N.ID = UM.CONTACTMASTER
        JOIN formTransLog TL
        ON UM.USERID = TL.USERNAME
        JOIN anet_Users AU
        ON UM.USERID = AU.USERNAME
        JOIN anet_Membership AM
        ON AU.USERID = AM.USERID
        JOIN ACTIVITY AC
        ON N.ID = AC.ID
        AND AC.ACTIVITY_TYPE = 'COURSE'
        AND AC.PRODUCT_CODE LIKE 'N%'
--ORDER BY 1, 7

DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + ']'
        ,@select_list = COALESCE(@select_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + '] AS [col_' + CONVERT(varchar, PIVOT_CODE) + ']'
FROM (
    SELECT DISTINCT PIVOT_CODE
    FROM (
        SELECT TEST, ED, ROW_NUMBER() OVER (PARTITION BY TEST ORDER BY ED) AS PIVOT_CODE
        FROM #tmp
    ) AS rows
) AS PIVOT_CODES

SET @sql = '
;WITH p AS (
    SELECT TEST, ED, ROW_NUMBER() OVER (PARTITION BY TEST ORDER BY ED) AS PIVOT_CODE
    FROM #tmp
)
SELECT TEST, ' + @select_list + '
FROM p
PIVOT (
    MIN(ED)
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt
'

PRINT @sql

EXEC (@sql)
编辑: 目标是使SSRS中的报告如下所示:

我可以通过在PIVOT操作符下面的查询中添加一个数字(RowNum)来生成您想要的结果。它不必出现在最终查询中(尽管您可能希望它用于客户端排序),但通过将它放在底层,PIVOT操作将该数字视为GROUPBY子句的成员

请查看下面的示例SQL,并让我知道这是否符合您的条件

CREATE TABLE #TMP
  (
    Name VARCHAR(10),
    Test VARCHAR(20),
    EffectiveDate DATETIME
  )
INSERT INTO #TMP (Name, Test, EffectiveDate)
SELECT 'Jane', 'NM_Course1', '01/17/2014' UNION
SELECT 'Jane', 'NMEP_Course1', '12/19/2013' UNION
SELECT 'Jane', 'NMEP_Course1', '12/20/2013' UNION
SELECT 'Jane', 'NMEP_Course2', '12/19/2013' UNION
SELECT 'Jane', 'NMEP_Course2', '12/22/2013' UNION
SELECT 'Jane', 'NMEP_Course2', '01/05/2014' UNION
SELECT 'John', 'NM_Course1', '01/17/2014' UNION
SELECT 'John', 'NMEP_Course1', '01/11/2014' 



DECLARE @sql AS varchar(max)
DECLARE @pivot_list AS varchar(max) -- Leave NULL for COALESCE technique
DECLARE @select_list AS varchar(max) -- Leave NULL for COALESCE technique

SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + ']'
        ,@select_list = COALESCE(@select_list + ', ', '') + '[' + CONVERT(varchar, PIVOT_CODE) + '] AS [col_' + CONVERT(varchar, PIVOT_CODE) + ']'
FROM (
    SELECT DISTINCT PIVOT_CODE
    FROM (
        SELECT TEST AS PIVOT_CODE
        FROM #tmp
    ) AS rows
) AS PIVOT_CODES

SET @sql = '
SELECT Name, ' + @select_list + '
FROM 
  (
    SELECT b.Name, RowNum, b.EffectiveDate, b.TEST AS PIVOT_CODE
    FROM 
          (
            SELECT Name, Test, EffectiveDate, ROW_NUMBER() OVER (PARTITION BY NAME, TEST ORDER BY EffectiveDate) RowNum 
            FROM #Tmp
          ) b
  ) p
PIVOT (
    MIN(EffectiveDate)
    FOR PIVOT_CODE IN (
        ' + @pivot_list + '
    )
) AS pvt
ORDER BY Name, RowNum
'


PRINT @sql

EXEC (@sql)


DROP TABLE #TMP 

你能展示一下你要找的样本布局吗?