我的透视查询正在生成重复的行,我被阻止了。任何人都可以解决这个问题吗?
CREATE PROCEDURE [dbo].[test2]
AS
BEGIN
--Declare necessary variables
DECLARE @SQLQuery AS NVARCHAR(MAX);
DECLARE @WeekColumns AS NVARCHAR(MAX);
--Get unique values of pivot column
SELECT @WeekColumns = COALESCE(@WeekColumns + ',', '')
+ QUOTENAME(name)
FROM ( SELECT name
FROM ( SELECT [id_week]
, name
, value
, prjfamilyID
, ROW_NUMBER() OVER ( PARTITION BY name
ORDER BY [id_week] ASC ) rn
FROM weekvalues
) a
WHERE rn = 1
) AS PivotExample;
SELECT @WeekColumns;
--Create the dynamic query with all the values for
--pivot column at runtime
SET @SQLQuery = N'SELECT prjfamilyID, ' + @WeekColumns + '
FROM [dbo].[weekvalues]
PIVOT( MAX(value)
FOR name IN (' + @WeekColumns + ')) AS P';
SELECT @SQLQuery;
--Execute dynamic query
EXEC sp_executesql @SQLQuery;
END;
以下是我得到的结果
1 NULL NULL 1004 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
1 NULL NULL NULL NULL NULL 997 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 992 NULL NULL NULL NULL
1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 997
2 NULL NULL 2100 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
2 NULL NULL NULL NULL NULL 2036 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2014 NULL NULL NULL NULL
2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 2040
3 NULL NULL 1944 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
3 NULL NULL NULL NULL NULL 1914 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL
3 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1882 NULL NULL NULL NULL
3 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 1880
我想要的是1号,例如我想将所有行合并为一个包含所有值的行
感谢
答案 0 :(得分:0)
您可以使用此更改@SQLQuery
查询,然后重试吗?
SET @SQLQuery =
N'SELECT * FROM (SELECT prjfamilyID, value, name
FROM [dbo].[weekvalues] ) SRC
PIVOT( MAX(value)
FOR name IN (' + @WeekColumns + ')) AS P';