【问题标题】:SQL to exclude two column values in a join tableSQL排除连接表中的两个列值
【发布时间】:2022-12-04 00:36:35
【问题描述】:

我有以下两个表

表格1

PKey number amount date
CN-897687 YHVY 299.99 11/21/22 3:32 PM
CN-646465 JWVF 271.05 10/21/22 4:34 AM
CN-475678 C96H 61.99 7/1/22 11:05 AM
CN-858673 QCVM 324.08 3/1/22 9:51 AM
CN-347468 RW44 165.02 5/9/22 8:49 AM
CN-079836 3XTY 371.34 11/27/22 8:48 PM

表 2

PKey state open_amt date
CN-897687 issued -299.99 11/21/22 3:32 PM
CN-897687 issued -0.99 11/29/22 11:31 AM
CN-475678 issued -61.99 7/1/22 11:05 AM
CN-858673 issued -324.08 3/1/22 9:51 AM
CN-858673 cleared 0.00 11/17/22 12:32 AM
CN-858673 issued -173.75 5/1/22 12:17 AM
CN-347468 issued -165.02 5/9/22 8:49 AM
CN-079836 issued -371.34 11/27/22 8:48 PM
CN-079836 issued -21.84 12/1/22 10:53 AM
CN-646465 issued -271.05 10/21/22 4:34 AM
CN-646465 issued -22.95 11/4/22 9:42 AM
CN-646465 issued -9.60 12/1/22 12:20 AM
CN-646465 cleared 0.00 12/2/22 12:34 AM

我正在使用下面的 sql 查询来获取如下输出

PKey number amount date state open_amt
CN-897687 YHVY 299.99 11/21/22 3:32 PM issued -0.99
CN-646465 JWVF 271.05 10/21/22 4:34 AM cleared 0.00
CN-475678 C96H 61.99 7/1/22 11:05 AM issued -61.99
CN-858673 QCVM 324.08 3/1/22 9:51 AM cleared 0.00
CN-347468 RW44 165.02 5/9/22 8:49 AM issued -165.02
CN-079836 3XTY 371.34 11/27/22 8:48 PM issued -21.84

我想要输出如下

PKey number amount date state open_amt
CN-897687 YHVY 299.99 11/21/22 3:32 PM issued -0.99
CN-475678 C96H 61.99 7/1/22 11:05 AM issued -61.99
CN-347468 RW44 165.02 5/9/22 8:49 AM issued -165.02
CN-079836 3XTY 371.34 11/27/22 8:48 PM issued -21.84
select distinct

t1.Pkey
t1.number,
t1.date,
t1.amount,
t2.open_amt,
t2.state

from 

        
(select *  from table 1
                            where PKey IN (
'CN-897687',
'CN-646465',
'CN-475678',
'CN-858673',
'CN-347468',
'CN-079836')
) t1
        
left join   (select *
                   from (select *, row_number () over (partition by Pkey order by date desc) rn
                            from table 2)
                                            where rn = 1
                                            -- and open_amt <> 0
                                           -- and state <> 'cleared'
) t2
                           
                                                on t1.Pkey = t2.Pkey

试图用不同的组合为 state <> 'cleared' 和 open_amt <> 0 设置过滤器,但没有得到所需的输出

【问题讨论】:

  • 一般提示:当问一个包含大量示例数据的问题时,建议创建一个小提琴,这将使复制您的问题并尝试可能的解决方案变得容易得多。

标签: sql


【解决方案1】:

只需在子查询中添加过滤条件。

select *, row_number () over (partition by Pkey order by date desc) rn
                            from table 2 where open_amt >0
                                           and trim(lower(state)) <> 'cleared'

顺便说一句:我没有执行您的查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多