簡體   English   中英

以一對多關系排除基於條件的所有ID值-SQL

[英]Excluding all ID values based on criteria, with a one to many relationship - SQL

不好意思,如果我對此措辭不好。 我已經搜索了一段時間,但不知何故一直不知道該怎么做。 如果有人能指出我正確的方向,那就太好了。

基本上,我有一個包含2列的表: Serv_No / Prd_Name

每個Serv_No (1、2、3、4、5等)可以具有無限變化的Prd_Name (A,B,C,D,AA,BB,CC等)

我只想包含Serv_No ,其中Serv_No具有Prd_Name = AAPrd_Name <> BB 如果Serv_No同時具有A1 & B1 ,然后排除的所有實例Serv_No ,即使與其他行Serv_No有不同的Prd_Name

謝謝

嘗試這個:

SELECT * FROM [TABLE] WHERE [serv_no] IN(
    SELECT [serv_no] FROM [TABLE]  GROUP BY [serv_no] having COUNT([serv_no])=1
) AND prd_name  = 'AA'

這將選擇所有只有1個prd_name的serv_no,然后按它們過濾表
您可以通過在末尾添加更多條件來更改條件

通常通過在情況下使用GROUP BY / HAVING來完成此操作:

select serv_no
from tab
group by serv_no
having -- include AA
       sum(case when prd_name = 'AA'          then 1 else 0 end)  = 1 
       -- AA plus at least 1 other row <> BB
   and sum(case when prd_name <> 'BB'         then 1 else 0 end) >= 2 
       -- exclude if both A1 & B1 are present
   and sum(case when prd_name in ('A1', 'B1') then 1 else 0 end) <> 2 

如果要獲取詳細信息行,則不僅可以使用serv_no,還可以使用OVER(PARTITION BY serv_no)將SUM作為窗口聚合移動到QUALIFY子句中。

這會工作嗎? 假設當您說a1和b1時,您的意思是aa和bb:

SELECT
    aa.serv_no
FROM
    (SELECT 
        serv_no
    FROM
        t
    WHERE
        prd_name = 'aa') aa LEFT OUTER JOIN
    (SELECT DISTINCT 
        serv_no
    FROM
        t
    WHERE
        prd_name = 'bb') bb ON
    aa.serv_no = bb.serv_no
WHERE
    bb.serv_no IS NULL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM