【问题标题】:Combining two rows where 1 column has a value and another is null合并两行,其中一列有值,另一列为空
【发布时间】:2013-12-29 06:33:22
【问题描述】:

我正在尝试合并两行(重复)

1) 第 1 行为空,第 2 行为值(或 Vice-a-Versa) 2) 两行都为空。

我需要将这两行合并以生成 1 行,其中该列的值(如果任一行中存在)或空值。

例如。

需要转换为

我已经为相同的数据设置了SQL Fiddle here。如果您需要更多信息,请告诉我。

到目前为止,我已经尝试过使用 Full Outer Join(它不适用于这么多包含 null 和内容的列)和 Pivot(我不确定它是否适合这个问题)。

SELECT A.EmployeeID, A.PostEditDate, 
A.In1
, A.Out2, A.In3, A.Out4, A.Out5, A.Out6, A.Out7, A.Out8, A.Out9, A.Out10  FROM #TempTableRV A
full outer JOIN #TempTableRV B
On A.EmployeeID = B.EmployeeID AND A.PostEditDate = B.PostEditDate
where 
A.PostEditDate = '2007-06-19 00:00:00.000' 
AND 
A.EmployeeID = 25690 and A.In1 IS NULL AND B.In1 IS NULL 

【问题讨论】:

  • 同一列中的两行是否有不同的值?如果不只是使用 group by。

标签: sql-server-2008 tsql row


【解决方案1】:
选择 员工ID, MAX(PostEditDate) 作为 PostEditDate, 最大(输入 1)作为输入 1, 最大(输出 2)作为输出 2, 最大(输入 3)作为输入 3, 最大(输出 4)作为输出 4, 最大(输出 5)作为输出 5, 最大(输出 6)作为输出 6, 最大(输出 7)作为输出 7, 最大(输出 8)作为输出 8, 最大(输出 9)作为输出 9, MAX(Out10) 作为 Out10 从 #TempTableRV 通过...分组 员工ID

【讨论】:

    【解决方案2】:

    试试这个

    SELECT DISTINCT EmployeeId,PostEditDate,
    (SELECT In1 FROM TempTableRV WHERE T.EmployeeId=EmployeeId AND T.PostEditDate=PostEditDate AND In1 IS NOT NULL) AS In1, 
    (SELECT Out2 FROM TempTableRV WHERE T.EmployeeId=EmployeeId AND T.PostEditDate=PostEditDate AND Out2 IS NOT NULL) AS Out2, 
    (SELECT In3 FROM TempTableRV WHERE T.EmployeeId=EmployeeId AND T.PostEditDate=PostEditDate AND In3 IS NOT NULL) AS In3, 
    (SELECT Out4 FROM TempTableRV WHERE T.EmployeeId=EmployeeId AND T.PostEditDate=PostEditDate AND Out4 IS NOT NULL) AS Out4,
    Out5,Out6,Out7,Out8,Out9,Out10
    FROM TempTableRV AS T
    

    如果需要,您可以对剩余的列(Out5、Out6、Out7、Out8、Out9、Out10)执行此操作。

    【讨论】:

    • 老实说,它看起来很难看,但是嘿!有用!!谢谢。
    • 如果有什么好的有效的方法请更新。
    • 我认为还有其他有效的方法可以做到这一点,但我不太确定,否则我不会问这个问题 :) 我会保持这个问题的开放性,以便其他人参与进来。
    • 但如果答案有效,请标记它。这对其他人会有所帮助,因为我在谷歌上搜索了这个答案并没有找到任何现成的东西。就这样吧。
    【解决方案3】:

    我会用固定/匹配的值创建一个新的临时表,然后更新它以设置有时为空的值。

    【讨论】:

      猜你喜欢
      • 2019-05-24
      • 2018-04-16
      • 2022-07-07
      • 2011-10-23
      • 2019-12-04
      • 1970-01-01
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      相关资源
      最近更新 更多