如何将相同courtnum和casenum的SQL表数据合并为单行?
合并相同courtnum和casenum的行解决方案
针对你的需求,因为同一组(相同courtnum和casenum)的行中,各日期列是互补的(一行有值另一行为NULL),可以用GROUP BY结合聚合函数MAX()(或MIN())来合并行,具体实现如下:
针对你的test表的示例代码
SELECT courtnum, casenum, MAX(startdate) AS startdate, MAX(enddate) AS enddate, MAX(pocdate) AS pocdate, MAX(pocenddate) AS pocenddate FROM test GROUP BY courtnum, casenum
扩展到8列的情况
如果实际表有8列,只要把剩下的列也按照同样的方式处理——对需要合并的非分组列,用MAX()(或MIN())包裹即可。比如假设还有col7、col8两列,代码就改成:
SELECT courtnum, casenum, MAX(startdate) AS startdate, MAX(enddate) AS enddate, MAX(pocdate) AS pocdate, MAX(pocenddate) AS pocenddate, MAX(col7) AS col7, MAX(col8) AS col8 FROM test GROUP BY courtnum, casenum
原理说明
MAX()和MIN()函数会自动忽略NULL值,所以同一组中只要有一行的某列有非空值,聚合后就能得到这个值,刚好实现互补行的合并。如果你的列中存在同一组内多行都有非空值的情况,需要根据实际业务逻辑选择用MAX()、MIN()或者其他聚合函数(比如STRING_AGG()处理字符串类型)。
内容的提问来源于stack exchange,提问作者Mohin K H
相关产品推荐
相关产品推荐

