SQL Pivot 分组问题
Posted
技术标签:
【中文标题】SQL Pivot 分组问题【英文标题】:SQL Pivot Grouping Issue 【发布时间】:2014-10-07 23:53:46 【问题描述】:我有一个包含几个简单规则的考试数据表。考试有许多基于地理和大小的不同轨道。问题是否可见取决于称为可见性的布尔列,该列填充为零表示“不可见”或填充为 1 表示“可见”。
问题 | 跟踪 | 可见性
问题_A |北_大 | 0 问题_A | South_Small | 1 问题_A | East_Med.... | 1 问题_B |北_大 | 1 问题_B | South_Small | 1 问题_B | East_Med.... | 1我的 Pivot 代码如下所示:
SELECT *
Into Track_Pivoted
FROM Track_Creation
PIVOT
(
COUNT(Visibility)
FOR [Track] IN ([Question A],[Question B]) as _pivoted
问题是,在结果表 Track_Pivoted Question A 中,North_Large 显示为 1,而在我从中选择的原始表中为 0。
我觉得这应该是正确的,但不确定发生了什么。我上面的例子是我的实际数据的简化版本,它有 40 首曲目的几百个问题,但我觉得我已经准确地表示了这个问题。
我们将不胜感激任何正确方向的帮助。
【问题讨论】:
我不太明白你想要的输出;也许这就是你想要的:sqlfiddle.com/#!3/15d58/25 ? 【参考方案1】:原因是您将 COUNT
用于聚合函数。它看到一个带有 North_Large 的 Question_A 的行,因此它返回 1。您可能需要将 COUNT
更改为 MAX
或 SUM
。
【讨论】:
【参考方案2】:不确定您希望使用哪种方式进行数据透视,但您现有的查询存在 3 个问题:
-
使用 COUNT() 将在所有单元格中产生 1。请改用 MAX()。
您正在将 [Track] 与 [Question] 的值进行比较
您要比较的值与数据不符(例如,下划线 A、not、空格 A)
所以,这里有两种选择:
转向问题:
SELECT *
FROM Track_Creation
PIVOT
(
MAX(Visibility)
FOR [Question] IN ([Question_A],[Question_B])
) as pivoted
;
| TRACK | QUESTION_A | QUESTION_B |
|--------------|------------|------------|
| East_Med.... | 1 | 1 |
| North_Large | 0 | 1 |
| South_Small | 1 | 1 |
重回正轨:
SELECT *
FROM Track_Creation
PIVOT
(
MAX(Visibility)
FOR [Track] IN ([North_Large],[East_Med....],[South_Small])
) as pivoted
;
| QUESTION | NORTH_LARGE | EAST_MED.... | SOUTH_SMALL |
|------------|-------------|--------------|-------------|
| Question_A | 0 | 1 | 1 |
| Question_B | 1 | 1 | 1 |
See this SQLFiddle demo
【讨论】:
以上是关于SQL Pivot 分组问题的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 动态行转列(参数化表名分组列行转列字段字段值)