sql - 在 SQL 中将多行和多列合并为一行

标签 sql sql-server t-sql

我读过一些有关在 SQL 中组合行的主题,其中大多数涉及使用数据透视表。我不确定数据透视在这里会有帮助,因为我试图将多个列组合成一行,而不是提取同一列的值。

表格如下所示:

OrderID   XboxLive   iTunes   XboxDate   iTunesDate   SerialNumber
9439      50.00      NULL     9/1/2018   NULL         12345
9439      NULL       82.00    NULL       9/2/2018     12345
9440      70.00      NULL     9/10/2018  NULL         12346

我希望结果如下:

OrderID   XboxLive   iTunes   XboxDate   iTunesDate   SerialNumber
9439      50.00      82.00    9/1/2018   9/2/2018     12345
9440      70.00      NULL     9/10/2018  NULL         12346

我尝试了下面这段代码的不同变体,但没有成功:

SELECT
  ISNULL(Xbox.OrderID, Apple.OrderID) AS OrderID,
  Xbox.XboxLive,
  Apple.iTunes,
  Xbox.XboxDate,
  Apple.iTunesDate
  ISNULL(Xbox.Serial, Apple.Serial) AS Serial
FROM SampleTable AS Xbox
FULL JOIN SampleTable AS Apple
  ON Apple.OrderID = Xbox.OrderID
  AND Apple.Serial = Xbox.Serial
 WHERE Xbox.XboxLive > 0
 OR Apple.iTunes > 0

任何帮助将不胜感激。

最佳答案

尝试以下操作:

SELECT
  OrderID,
  Max(XboxLive)
  Max(iTunes),
  Max(XboxDate),
  Max(iTunesDate)
  Serial
FROM SampleTable
Group by
  OrderID,
  Serial

关于sql - 在 SQL 中将多行和多列合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228438/

相关文章:

SQL IN 子句保证计算结果为 false

SQL给定多个阈值,获取低于每个阈值的最大值

sql-server - 使用一条语句更新 SQL 中具有增量日期的列表?

sql - MySQL查询从不同列复制日期

mysql - 从两个表中删除两列重复项,每个表上一列

sql-server - SSDT - 在架构创建时指定授权用户

sql - 将子记录添加到新列而不是新行

mysql - 应用 2 个不同的 ASC 标记 sql

mysql - 在对列求和时加入/合并

sql-server - 如何优化这个查询?