2014-09-02 57 views
0

我有一個類別表:SQL選擇類別中,項目有不同的價值觀

CategoryID Description 
------------------------- 
1    Red category 
2    Green category 
3    Blue category 

和項目表:

ItemID CategoryID Status 
------------------------------ 
1   1    "New" 
2   1    "New" 
3   1    "New" 
4   2    "Editing" 
5   2    "Editing" 
6   2    "Editing" 
7   3    "Published" 
8   3    "Published" 
9   3    "Published" 

這來自我正在移植到一個新的代碼遺留應用程序基礎。我懷疑項目表上的狀態列應該真的在分類表上。我如何驗證沒有任何項目的狀態與屬於同一類別的其他項目不同?

我知道我想要聚合具有相同類別ID的項目,所以我嘗試:

select categoryid 
from item 
group by categoryid 

這給了我不同的類別。現在我想選擇兩種不同的狀態:

select categoryid, count(status) > 1 
from item 
group by categoryid 
having count(status) > 1 

但是,這只是給了我在每個類別中的項目數。我在SQL上很糟糕。

+1

只是讓itemid出來..你會得到所有具有不同狀態的類別ID。 – 2014-09-02 19:36:03

+0

@samyi我不認爲這是正確的。看到上面的最後一句話。 – 2014-09-02 19:43:17

回答

1
SELECT * 
FROM YourTable A 
WHERE EXISTS(SELECT 1 FROM YourTable 
      WHERE CategoryId = A.CategoryId 
      AND [Status] <> A.[Status]) 
+0

什麼是YourTable?項目? – 2014-09-02 19:43:56

+0

@Koveras那麼'YourTable'是'item'表,是正確的。這是一種推廣你的答案的方式,因爲你首先說你有一個「類別」表 – Lamak 2014-09-02 19:47:54

0
SELECT c.CategoryId, 
(SELECT COUNT(DISTINCT i.Status) FROM Item i WHERE i.CategoryId=c.CategoryId) 
FROM Category c 
0

@Koveras,這會給你所有多個狀態的類別。

select categoryid 
from (
    select distinct categoryid, status 
    from item) t 
group by categoryid 
having count(*) > 1 

您目前接受的解決方案可以工作,但效率會降低。這是另一種解決方案。

See Fiddle Here