【问题标题】:Show accounts that have a missing value from a Table显示表中缺少值的帐户
【发布时间】:2022-10-14 22:13:06
【问题描述】:

我有一张包含帐户和付款类型的表格。每个账户必须有 1 种支付类型“GOGW”,1 个账户可能有多种支付类型。

我需要找到一种方法来确定哪些帐户没有“GOGW”

表格1

Account Type
123456 Cheque
123456 GOGW
654321 Direct Debit
654321 GOGW
987654 Direct Debit
456789 BACS

应该返回

Account Type
987654 Direct Debit
456789 BACS

【问题讨论】:

  • 看看用exists
  • 为什么在输出中你想要类型? “GOGW”是否丢失,与您想要在输出中的类型无关,仅与帐户有关。
  • 您是否有所有帐户和所有付款类型的单独表格?

标签: sql sql-server tsql


【解决方案1】:

您可以使用 GROUP BY / HAVING 找出没有任何 GOGW 的帐户

SELECT Account
FROM table1
GROUP BY Account
HAVING COUNT(CASE WHEN [Type] = 'GOGW' THEN 1 END) = 0

如果你想找到那些不完全是一个:

SELECT Account
FROM table1
GROUP BY Account
HAVING COUNT(CASE WHEN [Type] = 'GOGW' THEN 1 END) <> 1

现在您可以使用 IN、EXISTS 或 JOIN 来获取这些帐户的类型:

SELECT a.*
FROM table1 t1
JOIN (
    SELECT Account
    FROM table1
    GROUP BY Account
    HAVING COUNT(CASE WHEN [Type] = 'GOGW' THEN 1 END) = 0
) AS t2
    ON t1.Account = t2.Account

如果您使用的是最新版本,则可以改用窗口函数:

select Account, Type
from ( 
  select Account, Type, COUNT(CASE WHEN [Type] = 'GOGW' THEN 1 END) OVER (PARTITION BY ACCOUNT) as cnt
  from table1
) as t
WHERE cnt = 0;

Fiddle

【讨论】:

  • 非常感谢,我第一次使用这个论坛,你们是王牌!我有我需要的东西。
【解决方案2】:

您可以尝试以下语句...

SELECT table1.[Account]
      ,table1.[Type]
FROM table1
LEFT OUTER JOIN (SELECT table1.[Account]
FROM table1
WHERE table1.[Type] = 'GOGW') GOGW ON table1.[Account] = GOGW.[Account]
WHERE table1.[Type] <> 'GOGW'
AND GOGW.[Account] IS NULL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多