【问题标题】:Group Columns Through SQL Without Using The Pivot Function在不使用透视函数的情况下通过 SQL 对列进行分组
【发布时间】:2018-06-12 01:18:01
【问题描述】:

我有下表。

Store, Code, Active 
1000, C, N  
1000, D, N  
1000, J, N   
1000, R, N   
2000, C, N  
2000, D, N  
2000, J, N  
2000, R, N  
2000, F, N  
3000, C, Y  
3000, D, Y  
3000, J, Y  
3000, R, Y  
4000, C, Y  
4000, D, Y  
4000, J, Y  
4000, R, Y  
4000, F, Y      

我想在 SQL 中更改它,使其显示为这样。

Store, CDJR, CDJRF 
1000, N, N/A  
2000, N/A, N  
3000, Y, N/A  
4000, N/A, Y  

请记住,有数千行这样的行。任何帮助将不胜感激。

【问题讨论】:

  • 列计算背后的原因是什么?

标签: sql postgresql group-by


【解决方案1】:

假设您在具有相同存储值的每一行的活动列中具有相同的值(如您的示例数据所示),我们可以使用数字作为掩码,然后检查这些的总和并填充 cdjr 和 @ 987654322@ 相应列:

select
  store,
  case when sum(codeflag) = 1111 then max(active) else 'N/A' end as cdjr,
  case when sum(codeflag) = 11111 then max(active) else 'N/A' end as cdjrf
from (
  select
    store,
    case when code = 'C' then 1 
         when code = 'D' then 10
         when code = 'J' then 100
         when code = 'R' then 1000
         when code = 'F' then 10000
    end as codeflag,
    active
  from t
) t
group by store

结果:

 store | cdjr | cdjrf
-------+------+-------
  1000 | N    | N/A
  2000 | N/A  | N
  3000 | Y    | N/A
  4000 | N/A  | Y

如果您不能为活动列假定相同的值,我们需要将 max(active) 替换为仅 active 列值并将其包含在 GROUP BY 子句中。这将导致每个存储值出现多行,其中活动列中有多个值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    相关资源
    最近更新 更多