2017-08-01 65 views
8

我目前使用它來統計表中的所有數字或行,並且它適用於我所需要的。SQL COUNT行導致在單獨的列

SELECT COUNT(*) AS STCount 
    FROM (SELECT Distinct DPoint, RNum 
      FROM ECount 
      WHERE DType = 'STR' AND Month(EDate) = '07') AS rows 

我唯一的問題是我必須重複這個聲明很多,而只是每次改變一些東西。我想聯合這些選擇,但結果顯示在一個單獨的列中,下面的示例將獲得結果,但將它們全部放在同一列中。任何想法如何讓他們在自己的專欄顯示一個STCount和NCCount?

SELECT COUNT(*) AS STCount 
    FROM (SELECT Distinct DPoint, RNum 
      FROM ECount 
     WHERE DType = 'STR' AND Month(EDate) = '07') AS rows 
UNION 
SELECT COUNT(*) AS NCCount 
    FROM (SELECT Distinct DPoint, RNum 
      FROM ECount 
     WHERE DType = 'NCD' AND Month(EDate) = '07') AS rows 

結果將是,

STCount NCCount 
    100  202 
+0

請你給當前的結果和預期的結果以表格的形式,使我們可以瞭解問題 – Ashu

回答

12

您可以在select從句中做選擇,不需要一個from

select (select count(1) 
     from (select distinct DPoint, RNum 
       from ECount 
       where DType = 'STR' 
       and Month(EDate) = '07') as x 
     ) as rows1, 
     (select count(1) 
     from (select distinct DPoint, RNum 
       from ECount 
       where DType = 'NCD' 
       and Month(EDate) = '07') as x 
    ) as rows2; 
+0

理查德更加清晰,有沒有一種方法來設置使用這種方法的列名? – Ryan

+0

@Ryan是的,用你需要的名字替換'rows1'和'rows2'。 – Richard

+0

@理查德我做了這個,但它出現(無列名).... – Ryan

4
SELECT (SELECT COUNT(*) AS STCount 
      FROM (SELECT Distinct DPoint, RNum 
        FROM ECount 
       WHERE DType = 'STR' AND Month(EDate) = '07')) AS STCount 
     , (SELECT COUNT(*) AS NCCount 
      FROM (SELECT Distinct DPoint, RNum 
        FROM ECount 
        WHERE DType = 'NCD' AND Month(EDate) = '07')) AS NCCount 
+0

RealCheeseLord,我試過但我仍然得到(沒有列名) – Ryan

+0

我改了括號,也許再試一次。我無法測試它,所以對不起,如果這不起作用 – RealCheeseLord

+0

啊,忘了它。它現在與richards一樣... – RealCheeseLord

2

基本上,你只需要提供每個列的佔位符在你的工會聲明:

SELECT COUNT(*) AS STCount, 0 AS NCCount 
FROM (SELECT DISTINCT DPoint, RNum 
     FROM ECount 
     WHERE DType = 'STR' AND Month(EDate) = '07') AS rows 
UNION SELECT 0, COUNT(*) 
FROM (SELECT DISTINCT DPoint, RNum 
     FROM ECount 
     WHERE DType = 'NCD' AND Month(EDate) = '07') AS rows 

以上不符合這是後提供所需的輸出我添加了我的答案。所以,我建議你帶着其他答案之一(例如Richard的答案)。

2

我想你差點就使用UNION ALL而不是UNION的:

SELECT DType, COUNT(*) FROM (
    SELECT DType From (Select Distinct DPoint, RNum From 
    ECount Where DType = 'STR' and Month(EDate) = '07') as rows 
    UNION ALL 
    SELECT DType From (Select Distinct DPoint, RNum From 
    ECount Where DType = 'NCD' and Month(EDate) = '07') as rows 
) 
GROUP BY DType 
ORDER BY DType 

更多關於工會UNION ALL VS. UNION

+0

Tukan,我努力讓這個工作? – Ryan

+0

什麼樣的掙扎?你是否有一些錯誤信息,或者你得到了不同的結果嗎?需要更多信息來幫助你。 – tukan

2
select sum(x.[STR]) as STCount, sum(x.[NCD]) as NCCount 
from ECount 
pivot (count(DType) for DTypein ([NCD], [STR])) as x 
6

你可以使用一個CASE:

SELECT 
    COUNT (CASE WHEN DType = 'STR' THEN (1) ELSE NULL END) AS STCount, 
    COUNT (CASE WHEN DType = 'NCD' THEN (1) ELSE NULL END) AS NCCount 
    FROM (Select Distinct DType, DPoint, RNum From ECount WHERE Month(EDate) = '07') as rows 
+0

,你可以在這個月的條件如果你有不同的月份這樣:當DType ='STR'和Month(EDate)='07'並且添加EDATE在FROM(選擇不同的EDate,DType, RNum .... –

0

更實際的方法可能是選擇每種類型的計數作爲單獨的記錄並使用分組:

SELECT 
    COUNT(*) AS TypeCount, 
    Dtype 
FROM ECount 
WHERE Dtype IN ('STR', 'NCD') 
    AND MONTH(Edate) = '07' 
GROUP BY Dtype; 
+0

這將很好,但我需要DPoint,RNum的不同選擇以獲得正確的計數。 – Ryan