2010-10-26 50 views
1

試圖在SQL Server中這裏得到T-SQL的基本理解假設我有一個表命名爲「問題」這樣的欄目:增加值在表中的SQL 2008

Priority User 
1  Foo 
1  Foo 
2  Foo 
5  Foo 
4  Bar 
5  Bar 
1  Bar 
1  Fuz 

和我要顯示的優先數爲每個用戶,每個優先級的細分,沿着這樣的結果表可能被命名爲「故障」可能看起來像

User Total 1 2 3 4 5 
Foo 4  2 1 0 0 1 
Bar 3  1 0 0 1 1 
Fuz 1  1 0 0 0 0 

我想我可能會聲明變量和寫我的查詢有點像

DECLARE @P1 INT 
DECLARE @P2 INT 
DECLARE @P3 INT 
DECLARE @P4 INT 
DECLARE @P5 INT 

SELECT COUNT(id) AS Total,UserName, 
CASE Priority 
WHEN 1 Then @P1 = @P1 + 1 
WHEN 2 Then @P2 = @P2 + 1 
WHEN 3 Then @P3 = @P3 + 1 
WHEN 4 Then @P4 = @P4 + 1 
WHEN 5 Then @P5 = @P5 + 1 
END, 
FROM Breakdown 
GROUP BY UserName 

但我很確定我在錯誤的軌道上。有沒有人有什麼建議?

謝謝,並且對於無關緊要的問題感到抱歉;但我不確定在這裏谷歌究竟是什麼...

-R。

回答

4

用途:

SELECT i.user, 
     COUNT(i.priority) AS total, 
     SUM(CASE WHEN i.priority = 1 THEN 1 ELSE 0 END) AS 1, 
     SUM(CASE WHEN i.priority = 2 THEN 1 ELSE 0 END) AS 2, 
     SUM(CASE WHEN i.priority = 3 THEN 1 ELSE 0 END) AS 3, 
     SUM(CASE WHEN i.priority = 4 THEN 1 ELSE 0 END) AS 4, 
     SUM(CASE WHEN i.priority = 5 THEN 1 ELSE 0 END) AS 5 
    FROM ISSUES i 
GROUP BY i.user 

這是一個支點查詢,將行數據成柱狀的數據。
不是一個noob /初學者問題來處理。 SQL Server 2005+ added the (now ANSI) PIVOT/UNPIVOT syntax,但這對大多數數據庫是可移植的(因爲目前很少有支持PIVOT/UNPIVOT)。

+0

非常感謝小費。我試圖在某些SQL上做得更好,並且爲SSRS報告打亂了一些示例數據庫。再次感謝大家的幫助! – Randster 2010-10-26 00:58:53

2

您需要在結果集中爲每個列選擇一列。在你的SQL中,你只選擇了三列。嘗試:

SELECT UserName, 
     Count(*) AS Total, 
     SUM(CASE Priority WHEN 1 THEN 1 ELSE 0 END) AS P1_Total, 
     SUM(CASE Priority WHEN 2 THEN 1 ELSE 0 END) AS P2_Total, 
     SUM(CASE Priority WHEN 3 THEN 1 ELSE 0 END) AS P3_Total, 
     SUM(CASE Priority WHEN 4 THEN 1 ELSE 0 END) AS P4_Total, 
     SUM(CASE Priority WHEN 5 THEN 1 ELSE 0 END) AS P5_Total 
FROM Issues 
GROUP BY UserName 
+0

您忘了「END」;) – 2010-10-26 00:48:59

+0

感謝您編輯和添加'END'語句。我在SQL Management Studio中亂搞,不知道爲什麼我有一個語法錯誤,並且瘋狂地試圖讓谷歌幫助我。 – Randster 2010-10-26 00:58:16

+0

你能告訴我不用那麼多時間用SQL Server嗎? – 2010-10-26 01:00:02