2013-10-22 152 views
2

該查詢正常工作,但看起來多餘(也許我錯了)。它有更好的方式來做到這一點? (我需要所有的4列與總的每一行)SQL Server中兩個計數的總和

select parz.*, (parz.sessioniSvolte + parz.sessioniPianificate) as sessioniTotale 
from (
    select 
     e.Prefettura AS Prefettura, 
     count(case when s.Giorno<getDate() then s.idSessione else null end) AS sessioniSvolte, 
     count(case when s.Giorno>=getDate() then s.idSessione else null end) AS sessioniPianificate 
     from SESSIONE_FORMAZIONECIVICA s 
     inner join SEDE_SESSIONECIVICA e ON e.idSede = s.idSede 

     GROUP BY e.Prefettura 
) as parz 

我創辦了類似的問題,但他們並沒有與我的問題相匹配。

+1

如果你把你的查詢翻譯成英文,你真的會有所幫助,你和我的豬拉丁現在讓我想知道有關會議的討論會和麪包會議。 – flup

+0

sessioniSvolte = madeSessions sessioniPianificate = plannedSession :) – Accollativo

回答

3

您的查詢可能沒有子查詢通過把一個簡單count(*)被改寫:

select 
    e.Prefettura AS Prefettura, 
    count(case when s.Giorno<getDate() then s.idSessione end) AS sessioniSvolte, 
    count(case when s.Giorno>=getDate() then s.idSessione end) AS sessioniPianificate, 
    count(*) as sessioniTotale 
from SESSIONE_FORMAZIONECIVICA s 
join SEDE_SESSIONECIVICA e ON e.idSede = s.idSede 
GROUP BY e.Prefettura 

我刪除冗餘else null,因爲空是的情況下,默認的結果時,有不匹配。

+0

只是一個問題,count(*)是什麼?它總結了單行的所有值?例如,如果在選擇我有另一個計數,這個計數將進入計數(*)? – Accollativo

+0

我不知道你在問什麼。 – Bohemian

+0

如果我在我的選擇中有另一列,例如: count(case when foo ='1'then s.idSessione end)AS count2 會發生什麼情況:count(*)as sessioniTotale?它將等於sessioniSvolte + sessioniPianificate + count2 – Accollativo