Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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
t-SQL使用键字段将多行合并为一行_Sql_Sql Server_Merge_Rows - Fatal编程技术网

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