我有以下表 用戶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
是否有可能在一個查詢
我有以下表 用戶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
是否有可能在一個查詢
做一個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
使用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
使用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
我會檢查這一點,與CASE COUNT工作這麼標誌着作爲回答,似乎有一些問題,它正在採取太多的時間爲100,000行有3個用戶 - 感謝您的答覆 –
@AdilAhamed我不明白。哪個答案有性能問題? –
添Schmelter,那些可怕的方括號......不MS SQL Server的支持ANSI SQL的雙引號呢? – jarlh
列命名是不是一個問題,由於它的工作 –