SQL从表-1中选择变量并返回ID的返回计数

时间:2015-10-19 20:41:51

标签: sql sql-server

表-A

color_id- color
1- green
2- blue
3- orange
.
.
55- yellow

表-B

person-id, color
1, green
1, blue
2, orange
3, yellow
3, blue

表A中有55种以上颜色供成千上万人使用,我需要返回每个人使用的每种颜色的数量,即

它应该返回像

这样的结果
person_id, green, orange, blue, ......, yellow
1, 1,0,1,0,....0
2,0,1,0,....,0
3,0,0,1,...1

问题在于有55种以上的不同颜色类型,它们都保存在表A中,我可以编写一个select语句,然后输入所有这55个不同的变量并得到它们的计数,是他们快速选择的方式表-A中的变量然后返回它们的计数而不是 选择person_id,绿色计数().......黄色计数(

我正在使用SQL Server 2014。

由于

2 个答案:

答案 0 :(得分:0)

你可以在这里使用Dynamic Pivot ..因为你的TableB有实际的颜色,而不是颜色id,你可以只旋转一个表..

DECLARE @cols VARCHAR(MAX)

SELECT @cols = COALESCE(@cols + ',','') + '[' + color + ']' FROM TableA 

DECLARE @sql VARCHAR(MAX)

SET @Sql = 'SELECT person_id, ' + @cols + ' FROM TableB PIVOT (COUNT(color) FOR color IN (' + @cols + ')) p'

EXEC (@Sql)

答案 1 :(得分:0)

SELECT * 
FROM tableName
 PIVOT (COUNT(color) 
        FOR color
        IN (green,blue,Orange,yellow)  --<-- just mention all the colors here once
        )p