表-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。
由于
答案 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