2015-10-27 49 views
1

我有以下表 用戶ID [nvarchar的(128)],評分[VARCHAR(170)〕:值將主要1,2,3,但可以有例外計數值爲每種類型的

評分包含3個值[1,2或3]

我想要得到的結果類似

UserId Count(1's),Count(2's) Count(3's) 

1. 1001  10  8   2 
2. 1002  5  10  3 

是否有可能在一個查詢

回答

2

做一個GROUP BY UserId來湊nt爲每個用戶ID。使用CASE數1級的,2的和3的分別:

select UserId, 
     count(case when Rating = 1 then 1 end) as [Count(1's)], 
     count(case when Rating = 2 then 1 end) as [Count(2's)], 
     count(case when Rating = 3 then 1 end) as [Count(3's)] 
from tablename 
group by UserId 
+1

添Schmelter,那些可怕的方括號......不MS SQL Server的支持ANSI SQL的雙引號呢? – jarlh

+0

列命名是不是一個問題,由於它的工作 –

0

使用CASE聲明中的每個COUNT然後GROUP BY用戶ID。

SELECT UserId, COUNT(CASE WHEN value = '1' THEN 1 END) AS [Count(1's)], COUNT(CASE WHEN value = '2' THEN 1 END) AS [Count(2's)], COUNT(CASE WHEN value = '3' THEN 1 END) AS [Count(3's)] 
FROM yourtable 
GROUP BY UserId 
0

使用PIVOT

SELECT 
    UserId, 
    COALESCE([1],0) [Count(1's)], 
    COALESCE([2],0) [Count(2's)], 
    COALESCE([3],0) [Count(3's)] 
FROM 
    ýour_table 
PIVOT 
    (COUNT([Rating]) 
FOR Rating 
    in([1],[2],[3]) 
)AS p 
ORDER BY 
    UserId 
+0

我會檢查這一點,與CASE COUNT工作這麼標誌着作爲回答,似乎有一些問題,它正在採取太多的時間爲100,000行有3個用戶 - 感謝您的答覆 –

+0

@AdilAhamed我不明白。哪個答案有性能問題? –