t-SQL使用键字段将多行合并为一行
我有两张临时桌子t-SQL使用键字段将多行合并为一行,sql,sql-server,merge,rows,Sql,Sql Server,Merge,Rows,我有两张临时桌子 #data: Key UserID Driver Defect1 Defect2 Defect3 Defect4 ------------------------------------------------------------------------- 124 151 Paul Wheels Windows Null Null 124 151
#data:
Key UserID Driver Defect1 Defect2 Defect3 Defect4
-------------------------------------------------------------------------
124 151 Paul Wheels Windows Null Null
124 151 Paul Null Null Null Null
#data2:
Key Defect5 Defect6 Defect7
--------------------------------------
124 Seats Doors Hood
我正在寻找一种基于键字段将这3行合并成一行的方法,因此只需将它们向上滚动,忽略空值并将所有内容移动到一行。我已经将原始数据旋转到这一点,我正在寻找下一步来完成它
我希望能够:
#data2:
Key UserID Driver Defect1 Defect2 Defect3 Defect4 Defect5 Defect6 Defect7
------------------------------------------------------------------------------
124 151 Paul Wheels Windows Null Null Seats Doors Hood
有人能建议一条路吗
我的缺陷是基于行数(在透视之前)的增量,使用:
将表与键列连接,然后按键分组。谢谢,这非常有效。我已经在问题的底部添加了代码,以了解如何获得缺陷的列名。您的代码正是我想要的,但无法引用增量列“无效列名”,请提供进一步建议?我已经在其他专栏上运行了代码,非常完美,这是最后一个障碍。谢谢。如果列不是静态的,那么您需要创建一个动态sql。
SELECT @pivot_list = COALESCE(@pivot_list + ', ', '') + '[' + PIVOT_CODE + ']'
,@select_list = COALESCE(@select_list + ', ', '') +
'LEFT([' + PIVOT_CODE + '], CHARINDEX(''|'', ' + PIVOT_CODE + ')-1) AS [Defect_Item_' + SUBSTRING(PIVOT_CODE, 2, 4) + ']
'
FROM (
SELECT DISTINCT PIVOT_CODE
FROM (
SELECT 'r' + CAST(ROW_NUMBER() OVER (PARTITION BY formresultkey ORDER BY Defect_Item, Defect_description) AS VARCHAR(4)) AS PIVOT_CODE
FROM #Data3
) AS rows
) AS PIVOT_CODES
SELECT
a.Key,
a.UserID,
MAX(a.Driver),
MAX(a.Defect1),
MAX(a.Defect2),
MAX(a.Defect3),
MAX(a.Defect4),
MAX(b.Defect5),
MAX(b.Defect6),
MAX(b.Defect7)
FROM
#data a
LEFT OUTER JOIN
#data2 b ON a.Key = b.Key
GROUP BY
a.Key, a.UserID