SQL - 根据条件合并两个表中的列

问题描述 投票:0回答:1

我有两张桌子,例如:

Table A             Table B

+---------------+   +------------------------------+    
| ID   NAME     |   | ID    TYPE       DATE        |    
+---------------+   +------------------------------+    
| 001    A      |   | 001    URGE     2024-01-01   |    
| 002    B      |   | 001    UPDATE   2024-01-02   |
| 003    C      |   | 001    URGE     2024-01-03   |
+---------------+   | 002    UPDATE   2023-12-30   |
                    +------------------------------+

我想选择表A中的所有结果,并以条件“TYPE = 'URGE'”连接表B并输出最近的DATE,否则DATE列输出“-”。

我尝试过这样的代码:

SELECT
    A.ID,
    A.NAME,
    CASE WHEN B.TYPE = 'URGE' THEN B.TYPE ELSE '-' END AS TYPE,
    CASE WHEN B.TYPE = 'URGE' THEN B.DATE ELSE NULL END AS DATE
FROM
    TableA A
LEFT JOIN
    TableB B ON A.ID = B.ID AND B.TYPE = 'URGE';

结果是:

   +-------------------------------------+    
   | ID    NAME   TYPE       DATE        |    
   +-------------------------------------+    
   | 001    A    URGE     2024-01-01     | 
   | 001    A    URGE     2024-01-03     |   
   | 002    B    -        NULL           |
   | 003    C    -        NULL           |
   +-------------------------------------+

购买我的预期结果是:

   +-------------------------------------+    
   | ID    NAME   TYPE       DATE        |    
   +-------------------------------------+    
   | 001    A    URGE     2024-01-03     |    
   | 002    B    -        NULL           |
   | 003    C    -        NULL           |
   +-------------------------------------+

我该如何更改代码?谢谢!

sql db2
1个回答
0
投票

您只需根据日期汇总结果 -

SELECT
    A.ID,
    A.NAME,
    CASE WHEN B.TYPE = 'URGE' THEN B.TYPE ELSE '-' END AS TYPE,
    MAX(CASE WHEN B.TYPE = 'URGE' THEN B.DATE ELSE NULL END) AS DATE
FROM
    TableA A
LEFT JOIN
    TableB B ON A.ID = B.ID AND B.TYPE = 'URGE'
GROUP BY A.ID,
         A.NAME,
         CASE WHEN B.TYPE = 'URGE' THEN B.TYPE ELSE '-' END AS TYPE;
© www.soinside.com 2019 - 2024. All rights reserved.