2017-09-06 61 views
0

我有一個表中包含2列的場景。 產品和子像如何查找具有多個字段的重複元素

Sno Product Sub 
1  pr1  sub1 
2  pr1  sub1 
3  pr2  sub1 
4  pr2  sub1 
5  pr3  sub2 
6  pr4  sub3 
7  pr5  sub3 
8  pr6  sub4 
9  pr6  sub4 

我想找到具有山坳分配到山坳產品比1.But DIFF產品不相同的多個要素。

所以我的結果將是SUB1SUB3 預期的結果將是截然不同的:

Sub 
1 sub1 
2 sub3 

我嘗試使用組通過對產品和像子的東西:

SELECT 
    product, 
    sub, 
    COUNT(*) 
FROM table1 
GROUP BY 
    product, 
    sub 
HAVING COUNT(*) > 1; 

但這對於給定的場景是不正確的。 需要你的建議。

+1

你必須同時從'select'和'組by'條款刪除'sub'場。 –

+0

添加更多行樣本數據,並將預期結果指定爲格式化表格! – jarlh

+0

當然我會進行修改 –

回答

0

這個怎麼樣?

SELECT sub FROM table1 
GROUP BY sub 
HAVING COUNT(sub) > 1 
+0

錯誤。 _Set函數未在SELECT子句或HAVING子句_中指定。 – jarlh

+0

對不起,我沒有看到子場爲VARCHAR類型 – Jackques

+0

@無jackques它與分配給同一product.not不同的產品「SUB4」選擇列。 –

0
SELECT t1.product,t1.sub,t1.Count 
FROM 
    (SELECT product,sub,DENSE_RANK() OVER (Partition By product ORDER BY Sub) Count 
    FROM table1 
    ) t1 
WHERE t1.Count=2 
-- = 2 Means product Repeated more than 1 
+0

不能有'WHERE'子句中的窗口功能。無論如何,對於小任務,你的方法非常複雜。 –

1

從問題提供的樣本數據,看來你是從具有一個以上productSub尋找所有不同行。您可以使用以下查詢來實現此目的。

select a.sub from (
select distinct sub, product from table1 
    ) a 
group by a.sub 
having count(*) > 1 

結果:

SUB 
--------  
1 sub1 
2 sub3 

您可以檢查演示sub and use HAVING`到here

+0

真棒zarruq。 –

+0

感謝大家誰花時間建議在th是。 –

+0

這是一個非常複雜的方法來計算不同的值。只需使用'COUNT(DISTINCT product)'代替。 'count(sub)'在你的查詢中更令人困惑,並且使得它更不可讀;它應該是'count(*)',因爲你正在計數記錄。 'count(sub)'表明可以有null subs要從計數中排除。不要這樣做。 –

2

聚合只能得到那些擁有多個系列產品:

select sub 
from table1 
group by sub 
having min(product) <> max(product); 

select sub 
from table1 
group by sub 
having count(distinct product) > 1; 
相關問題