【发布时间】:2016-04-05 17:06:48
【问题描述】:
我正在开展一个为不同订单创建 SLA 的项目。为此,我需要将多行合并为一行,尽管有时它会超过 1 行。以下是当前数据的设置方式:
OrderNumber | Stage1 | Stage2 | Stage3 | Stage4 |
=================================================
1 |1/1/2016|*NULL* |*NULL* | *NULL*
1 |*NULL* |2/1/2016|*NULL* | *NULL*
1 |*NULL* |*NULL* |3/1/2016| *NULL*
1 |*NULL* |*NULL* |*NULL* | 4/1/2016
1 |*NULL* |5/1/2016|*NULL* | *NULL*
我希望看到数据的方式是这样的:
OrderNumber | Stage1 | Stage2 | Stage3 | Stage4 |
=================================================
1 |1/1/2016|2/1/2016|3/1/2016| 4/1/2016
1 |1/1/2016|5/1/2016|*NULL* | *NULL*
或
OrderNumber | Stage1 | Stage2 | Stage3 | Stage4 |
=================================================
1 |1/1/2016|2/1/2016|3/1/2016| 4/1/2016
1 |*NULL* |5/1/2016|*NULL* | *NULL*
我看到了两个问题,1)将多行合并为一行,2)如果一个值在列中出现多次,则在新行中显示它(理想情况下,前阶段的值出现在前面列,但这不是必需的)。
我找到的最接近的解决方案是:Merge two rows in SQL,但它不适用于这个问题。
任何帮助将不胜感激。
编辑更新标签
【问题讨论】:
-
如果第一阶段有两个非空日期而不是一个会发生什么?哪一个与 stage2 两个日期配对?
-
我能想到的最简单的方法是在值不为空时为每个阶段分配一个行号。然后根据rownumber加入数据
-
是sql-server还是mysql? sql-server 表示 Microsoft SQL Server。请正确使用标签
-
"如果第 1 阶段有两个非空日期而不是一个,会发生什么情况?您将哪一个与第 2 阶段的两个日期配对?" – Juan Carlos Oropeza 在这种情况下,第一个日期(最早的日期)将在第一行,第二个日期(较晚的日期)将在两个阶段的第二行。 “将多行合并为单行的可能重复项” – Ken White 我曾研究过这一行,看起来重点是数据的串联,这在此处不起作用。
标签: sql-server merge