2016-08-16 70 views
0

我查詢,並與下面的示例數據SQL服務器GROUP BY大於

SELECT tb1.ID , 
     tb2.TypeID , 
     tb2.Name 
FROM tb1 
     INNER JOIN tb2 ON tb1.ID = tb2.ID 
WHERE tb1.Status = 1 
GROUP BY tb1.ID , 
     tb2.TypeID , 
     tb2.Name 

ID | TypeID | Name| 
====================== 
11 | 1  | A | 
19 | 1  | A | 
10 | 2  | A | 
5 | 1  | B | 
4 | 2  | B | 
20 | 1  | C | 
21 | 1  | C | 

表我想創建一個查詢,示出了爲每個不同的TYPEID +名稱超過1,例如在ID

ID | 
===== 
11 | 
19 | 
20 | 
21 | 

任何人都可以給我一點幫助嗎?謝謝。

+0

但在你的例子中沒有5或4?所提供的邏輯也需要aB和2 B。 – Whencesoever

+0

@JanWalczak - 因爲'(TypeID,Name)'combination'(1,A)'不止一次出現,所以我們得到11和19.因爲'(1,C)'出現了多次,所以我們得到了20和21這兩列的其他組合不會再出現一次以上。 –

+0

是的,我的錯誤,你需要那些不止一次的使用。 – Whencesoever

回答

0

嘗試這樣,

SELECT tb1.ID 
FROM tb1 
INNER JOIN tb2 ON tb1.ID = tb2.ID 
INNER JOIN (
    SELECT tb2.TypeID 
     ,tb2.NAME 
    FROM tb1 
    INNER JOIN tb2 ON tb1.ID = tb2.ID 
    WHERE tb1.STATUS = 1 
    GROUP BY tb2.TypeID 
     ,tb2.NAME 
    HAVING COUNT(*) > 1 
    ) tb3 ON tb3.typeid = tb2.typeid 
    AND tb3.NAME = tb2.NAME 
WHERE tb1.STATUS = 1 
+0

它的工作原理。感謝您的答案。真的很有幫助 – ThaiBM

0

您將需要一個子查詢,將選擇由這兩個領域的分組和分組後有2多發生的所有記錄。

SELECT tb1.ID FROM tb1 INNER JOIN tb2 ON tb1.ID = tb2.ID INNER JOIN (
    SELECT tb2.TypeID ,tb2.name FROM tb1 
    INNER JOIN tb2 ON tb1.ID = tb2.ID WHERE tb1.status = 1 
    GROUP BY tb2.TypeID ,tb2.name HAVING COUNT(*) > 1 
    ) temp ON temp.typeid = tb2.typeid 
    AND temp.name = tb2.Name 
WHERE tb1.status = 1 
+1

Nóhoạtđộng。 cảmơnchocâutrảlời。 – ThaiBM