2013-08-26 65 views
1

我有一個像如何選擇所有記錄,即使在SQL中沒有數據

SELECT 'Education' as Purpose,ate_sex, Age_range, COUNT(*) AS Total 
    FROM (
     SELECT dbo.ClientMain.ate_sex, dbo.ClientMain.ate_Id, 
      CASE 
      WHEN ate_Age BETWEEN 15 AND 19 THEN '15-19' 
      WHEN ate_Age BETWEEN 20 AND 24 THEN '20-24' 
      WHEN ate_Age BETWEEN 25 AND 34 THEN '25-34' 
      WHEN ate_Age BETWEEN 35 AND 44 THEN '35-44' 
      WHEN ate_Age BETWEEN 45 AND 54 THEN '45-54' 
      WHEN ate_Age BETWEEN 55 AND 64 THEN '55-64' 
      ELSE '80+' END AS Age_range 
     FROM dbo.ClientMain 
     INNER JOIN dbo.ClientSub ON dbo.ClientMain.ate_Id = dbo.ClientSub.ate_Id 
     WHERE (dbo.ClientSub.chk_Name = N'Assistance') 
     ) AS t group by ate_sex,Age_range 

查詢作爲返回數據:

enter image description here

但我想我的結果當他在15-19歲時沒有記錄時,必須歸零。作爲教育男15-19 0 這些是我的表 enter image description here 任何人都可以請修改我的查詢來獲得零的記錄沒有。

+0

請提供一個ClientMain和ClientSub行的示例。 –

+0

您的ClientMain表中是否有15到19行的ate_sex ='Male'?如果是,您可能想要使用LEFT JOIN而不是Inner join。 –

+0

查看我的表格結構.. @ Francesco De Lisi –

回答

3
  • 使用的LEFT JOIN代替INNER JOIN

  • 使用ISNULL(COUNT(*), 0),而不是COUNT(*)。另外,您還可以使用

    Total = CASE WHEN COUNT(*) IS NULL THEN 0 ELSE COUNT(*) END

+0

'NONULL'不是一個公認的內置函數名稱。 –

+0

對不起,我的意思是'ISNULL'。我編輯了我的答案。 –

+0

我試過這個..事件我得到了同樣的答案..我沒有得到零 –

1

試試這個,

case when COUNT(*) = 1 then 0 else COUNT(*) end as exp 
+0

我試過這個..它給出錯誤的輸出。 –

+0

手段?什麼是錯誤的輸出? – Chintan

+0

這是給存在的行也是零..當總數是1時,它顯示爲0.如果總數超過1,它顯示確切的輸出 –

0

如果犯規的任何表有男性,15-19的數據,但你仍然想在結果計數爲「0」。嘗試使用可能的行構建靜態表,然後與結果集進行交叉連接。

相關問題