不仅要显示转载数据还要显示非打印数据?使用左连接

Show not only the reprint data but also non-printed one? Using left join

select
    barcode,
    fullname,
    social,
    printdate,
    (case
        when min(orderId) = 0 then 'yes'
        when min(orderid) <> 0 then 'No'
    end) as Reprint
from
    clientdata (nolock)
left outer join ReprintTable with(nolock) on
    Code = barcode
where
    clientcode = '334556'
    --and printdate < '2021-02-23'

    group by barcode,
    fullname,
    social,
    printdate
order by
    printdate

此查询背后的逻辑:

所以基本上我想显示所有重印卡和非重印卡,我使用左外连接加入重印 table(它存储重印卡的所有信息,如重印日期)

基本上如果卡片的orderid为0,则表示该卡片已经重印,反之亦然

我想让我的查询显示所有非重印卡并排除 23 日之前重印的重印卡,但是一旦我添加了 and 子句,非重印卡就没有了显示时间更长。

我该如何解决这个问题。

如果我重新添加 and 子句(不是真实数据,而是使用示例)的输出:

barcode     fullname        Social   PrintDate          Reprint
024556      Donald Wick     4556     2021-01-03         yes
024557      John Trump      4558     2021-01-08         yes

如果我去掉 and 子句:

barcode     fullname        Social   PrintDate          Reprint
024556      Donald Wick     4556     2021-01-03         yes
024557      John Trump      4558     2021-01-08         yes
024557      Stop Gambling   4556     null               no

等...

无论如何,我可以让非转载数据与我筛选的转载范围一起显示吗?

您需要包括 printdate 为空的情况 - 即当 ReprintTable table.

中不存在任何记录时

如果您为 table 设置别名并在列前加上 table 别名,事情就会变得更加清晰。

另请注意,由于某些 PrintDate 值为空,因此它可能不会像您预期的那样排序。

select barcode, fullname, Social, RT.PrintDate
    , (
        case when min(orderId) = 0 then 'yes'
        when min(orderid) <> 0 then 'No'    
        end
    ) as Reprint 
from ClientData CD with (nolock)
left outer join ReprintTable RT with (nolock) on Code = barcode
where clientcode = '334556'
and (RT.PrintDate is null or RT.PrintDate < '2021-02-23')
group by barcode, fullname, Social, RT.printdate
order by RT.PrintDate