连接 2 个表,但仅在第一个表中显示第二个表中的值一次

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

我绞尽脑汁想解决这个问题。我正在使用 Presto SQL。

我有2张桌子:

trx(每日交易量):

| date       | usage    | deposit_id |
| -----------| -------- |------------|
| 2024-08-12 | 2,500    | DEP001     |
| 2024-08-14 | 3,500    | DEP002     |
| 2024-08-15 | 3,500    | DEP002     |

存款(进行存款的客户):

| deposit_date | deposit_id | deposit_amount|
| -------------| -----------|---------------|
| 2024-08-12   | DEP001     | 1,000,000     |
| 2024-08-13   | DEP002     |  500,000      |

我希望连接的表是(来自每笔存款的交易):

| date       | usage    | deposit_id | deposit_amount
| -----------| -------- |------------|---------------
| 2024-08-12 | 2,500    | DEP001     |   1,000,000
| 2024-08-13 |   0      | DEP002     |    500,000
| 2024-08-14 | 3,500    | DEP002     |      0
| 2024-08-15 | 3,500    | DEP002     |      0

基本上我希望将这两个表连接起来,并在使用日期显示使用情况,并在存款日期显示存款金额。我还想继续跟踪每次使用的 Deposit_id。

左/右/内连接不起作用,因为日期不会显示。

请帮忙!谢谢你

我尝试过左连接、右连接、内连接,但不起作用。还探索了 union all 和 group by,但它会在最终表中显示空白。

sql join group-by union presto
1个回答
0
投票

我不了解 Presto,因此您可能需要调整语法,但这可能是一种方法:

WITH DATASET AS (
SELECT 
T.TRX_DATE, T.USAGE, T.DEPOSIT_ID T_DEPOSIT_ID
,D.DEPOSIT_DATE, D.DEPOSIT_ID D_DEPOSIT_ID, D.DEPOSIT_AMOUNT
FROM TRX T
FULL JOIN DEPOSIT D ON T.TRX_DATE = D.DEPOSIT_DATE AND T.DEPOSIT_ID = D.DEPOSIT_ID
)
SELECT
COALESCE(TRX_DATE, DEPOSIT_DATE) DATE
,NVL(USAGE,0) USAGE
,COALESCE(T_DEPOSIT_ID, D_DEPOSIT_ID) DEPOSIT_ID
,NVL(DEPOSIT_AMOUNT, 0) DEPOSIT_AMOUNT
FROM DATASET
ORDER BY COALESCE(TRX_DATE, DEPOSIT_DATE) ASC
;
© www.soinside.com 2019 - 2024. All rights reserved.