簡體   English   中英

SQL 如何過濾具有多個唯一值的另一列的值的表

[英]SQL How to filter table with values having more than one unique value of another column

我有如下所示的數據表客戶:

ID | Sequence No |
1  |  1          |
1  |  2          |
1  |  3          |
2  |  1          |
2  |  1          |
2  |  1          |
3  |  1          |
3  |  2          |

我想過濾該表,以便僅保留具有超過 1 個不同序列號計數的 ID。

預期 output:

ID | Sequence No |
1  |  1          |
1  |  2          |
1  |  3          |
3  |  1          |
3  |  2          |

我試過了

select ID, Sequence No 
from Customers 
where count(distinct Sequence No) > 1
order by ID

但我遇到了錯誤。 如何解決這個問題?

使用解析函數,我們可以嘗試:

WITH cte AS (
    SELECT *, MIN([Sequence No]) OVER (PARTITION BY ID) min_seq,
              MAX([Sequence No]) OVER (PARTITION BY ID) max_seq
    FROM Customers
)

SELECT ID, [Sequence No]
FROM cte
WHERE min_seq <> max_seq
ORDER BY ID, [Sequence No];

下面演示鏈接的屏幕截圖

演示

我們通過斷言給定ID的最小和最大序列號不同來檢查序列號的不同計數。 上述查詢可以受益於以下索引:

CREATE INDEX idx ON Customers (ID, [Sequence No]);

這樣可以更快地查找最小值和最大值。

您可以使用以下查詢獲得所需的結果。 這與您嘗試的類似 -

樣本表和數據

Declare @Data table
(Id int,  [Sequence No] int)

Insert into @Data
values
(1  ,  1   ),
(1  ,  2   ),
(1  ,  3   ),
(2  ,  1   ),
(2  ,  1   ),
(2  ,  1   ),
(3  ,  1   ),
(3  ,  2   )

詢問

Select * from @Data 
where ID in(
            select ID
            from @Data 
            Group by ID
            Having count(distinct [Sequence No]) > 1
            )

暫無
暫無

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

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