2013-12-17 33 views
0

兩個表(family_table)(children_table)family_id相關, 你怎麼指望有state 'a'和孩子經由一個查詢有state 'b'到每個家庭的孩子嗎?兩個值在左外算上加盟同桌

我試過的children_state 'a'查詢但children_state 'b'計數的結果,計數是錯誤的,我不知道問題出在哪裏,我的查詢是:

select f.family_id , 
count(c.family_id) as [B children Count] , 
count(cp.family_id) as [A children Count] 
FROM Family_table as f left outer join children_table as c 
on c.family_id = f.family_id and c.children_state = 'B' left outer join children_table as cp 
on cp.family_id = f.family_id and c.children_state = 'A' 

回答

0

通過

嘗試一組

下面的SQL不是驗證爲我沒有在工作

select f.family_id , c.children_state, count(c.children_state) 
FROM Family_table as f left outer join children_table as c 
on c.family_id = f.family_id 
and c.children_state in ('A','B') 
group by f.family_id , c.children_state 
+0

確定..如果我想指望有狀態的孩子什麼'A'和沒有說明'A'或'c'的孩子? – Hamonbatra

+0

@ user3038625您對c.children_state的約束可以在group by之前添加。關鍵的一點是,一旦約束得到滿足,小組將會爲你做點數。例如('A','B')中的c.children_state和('A','B')或(c.children_state ='C'和c.children_state!='A')中的c.children_state替換和c.children_state –

+0

對不起,但結果是錯誤的 – Hamonbatra

1

此訪問SQLSERVER應該做你想要什麼:

select f.family_id , 
     SUM(CASE c.children_state WHEN 'B' THEN 1 ELSE 0 END) as [B children Count] , 
     SUM(CASE c.children_state WHEN 'A' THEN 1 ELSE 0 END) as [A children Count] 
     SUM(CASE WHEN c.children_state <> 'd' and c.children_state <> 'e' THEN 1 ELSE 0 END) AS [Some other count] 
FROM Family_table as f 
join children_table as c 
on c.family_id = f.family_id 
GROUP BY f.family_id 

它通過使用金額,然後內的總和將您感興趣的特定數量的條件。這樣,你可以從一個多個不同的「罪名」加入

如果您有其他條件,則只需添加額外的SUM列,使用不同的CASE語句

+0

我可以添加條件'when'單詞示例:當'B'和children_state <>'d'和children_state <>'e'? – Hamonbatra

+0

我不太確定我的理解 - 一個孩子不能同時B和<>'d'...我已經給答案添加了一個更復雜的條件示例 –