【问题标题】:t-SQL Combine multiple rows to one row using key fieldt-SQL 使用键字段将多行合并为一行
【发布时间】:2014-09-01 19:06:06
【问题描述】:

我有 2 个临时表

#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

我正在寻找一种方法,根据 Key 字段将这 3 行组合成一行,因此只需将它们卷起来,忽略空值并将所有内容移至一行。我已经对原始数据进行了透视以使其达到这一点,并且正在寻找下一步来完成它。

我希望到达:

#data2:
Key  UserID  Driver Defect1 Defect2 Defect3  Defect4 Defect5  Defect6  Defect7
------------------------------------------------------------------------------
124  151     Paul   Wheels  Windows Null     Null    Seats    Doors    Hood

有人可以推荐一个方法吗?

我的缺陷是基于行数(在枢轴之前)使用以下方法递增的:

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

【问题讨论】:

  • 使用您的 Key 列加入表,然后执行 GROUP BY Key。

标签: sql sql-server merge rows


【解决方案1】:
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

【讨论】:

  • 谢谢你这工作真的很好。我已将代码添加到问题的底部,以了解如何获取缺陷的列名。您的代码正是我正在寻找的,但无法引用增量列“无效的列名”,请问有什么进一步的建议吗?我已经在其他列上运行了代码并且很完美,只是最后一个障碍。谢谢。
  • 如果列不是静态的,那么你需要创建一个动态的sql。
猜你喜欢
  • 1970-01-01
  • 2015-09-05
  • 2023-03-19
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多