2014-03-24 94 views
0

我試圖寫在SQL Server查詢抓住這些樣本值:報告sql查詢多個何在

firstname, 
lastname, 
count(reports where status =1), 
count(reports where status =2) 

sample report

我如何才能在一個SQL語句,這些價值觀?

這裏是樣本輸出 enter image description here

+1

如果其他列數據是按行計算的,那麼究竟是什麼總和?你能提供所需結果的樣本嗎? – keltar

+0

仍然沒有得到它。總結一下?所有報告具有相同的狀態? (併爲每一行復制這筆金額?)。所有報告具有相同的名字/姓氏相同的狀態? 'sum(all'是什麼意思? – keltar

+0

我想要的人和每個狀態的人的報告數量,狀態數量1,狀態數量2,狀態數量3 –

回答

1

我認爲你也可以用PIVOT來完成它。我不知道你會想:

DECLARE @tbl TABLE(UserName VARCHAR(10), Report VARCHAR(10), StatusId INT) 
INSERT INTO @tbl VALUES ('bob','report1',1) 
         ,('bob','report2',1) 
         ,('bob','report3',2) 
         ,('jim','report2',1) 
         ,('joe','report3',3) 


SELECT UserName, [1] Status1_Count,[2] Status2_Count,[3] Status3_Count 
    FROM (SELECT UserName 
       ,StatusId 
       ,COUNT(*) ReportCount 
      FROM @tbl 
     GROUP BY UserName 
       ,StatusId) src 
PIVOT (MAX(StatusId) 
     FOR StatusId IN ([1],[2],[3])) pvt 

的GROUP BY和COUNT答案是一般的好,它只是沒有做你問什麼,這是不具有對用戶的所有狀態計數一個單一的行。

+0

這個效果更好,因爲它是每列,我只想要某些狀態 –

0

聽起來像是你將需要使用一個case語句

這很難決定你什麼恰與問題,但case語句看起來是這樣的:

sum(CASE WHEN status = 1 THEN reports ELSE 0 END), 
    sum(CASE WHEN status = 2 THEN reports ELSE 0 END), 
    sum(CASE WHEN status = 1 THEN 1 ELSE 0 END), 
    sum(CASE WHEN status = 2 THEN 1 ELSE 0 END) 
1

貌似XY問題,我...

select firstname, lastname, status, count(status) 
from report 
group by firstname, lastname, status 
order by firstname, lastname, status 
+0

這就足夠接近我想列出謝謝 –

+0

它可以完成使用通用表表達式的列,但是這是一個壞的方法 - 你必須知道可能的狀態,對於行來說,它是不需要的 – keltar