【问题标题】:SQL select variables from table-1 and return count for IDsSQL 从表 1 中选择变量并返回 ID 计数
【发布时间】:2015-10-20 05:00:39
【问题描述】:

表-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+ 种不同的颜色类型,它们都保存在 Table-A 中,我可以编写一个 select 语句,然后键入所有这 55 个不同的变量并获取它们的计数,这是它们的快速选择方法Table-A 中的变量,然后返回它们的计数而不是 选择person_id,绿色计数().......黄色计数(

我使用的是 SQL Server 2014。

谢谢

【问题讨论】:

  • 为什么将颜色字符串存储在两个地方?第二个表应该有color_id,而不是color
  • 一个简单的加入和分组应该可以很好地处理这个问题。

标签: sql sql-server


【解决方案1】:

您可以在此处使用 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)

【讨论】:

  • 感谢 JamieD77,它工作得很好,现在又多了一个问题,这是他们在此处使用 group by person_id 的一种方式,因为它为每个 person_id 返回多行。非常感谢!
  • 除了颜色和personid之外,您是否添加了其他字段?
  • 这是一个 sql fiddle.. 如果你可以添加你的更改,我可以看看 sqlfiddle.com/#!3/6faf50/1
  • 这是我的错误,它运行良好。谢谢,谢谢,非常感谢!
【解决方案2】:
SELECT * 
FROM tableName
 PIVOT (COUNT(color) 
        FOR color
        IN (green,blue,Orange,yellow)  --<-- just mention all the colors here once
        )p

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多