数据库 |根据条件将列查看为多列

标签 sql postgresql

新手 Postgresql (9.6.6) 问题在这里:)

我想创建一个 View ,根据不同的条件将单列拆分为多列。

示例表

  Name    Score   Season  
 ------- ------- -------- 
  John       12   Fall    
  John       15   Winter  
  John       13   Spring  
  Sally      17   Fall    
  Sally      10   Winter  
  Sally      14   Spring  
  Henry      16   Fall    
  Henry      12   Winter  
  Henry      18   Spring  

我希望 View 显示如下所示的内容:

  Name    Fall Score   Winter Score   Spring Score  
 ------- ------------ -------------- -------------- 
  John            12             15             13  
  Sally           17             10             14  
  Henry           16             12             18  

其中“Score”字段被分成几个不同的列,每个列都基于引用“Season”字段的 WHERE 子句进行填充。我已经研究了 Window Functions 和 CASE Statements 来实现这个目的,但到目前为止还没有成功。

非常感谢任何帮助!

最佳答案

从整个表中选择,同时根据 Name 分组,然后有条件地 SUMming 在 Score 列上将起作用:

SELECT
    "Name",
    SUM(CASE WHEN "Season" = 'Fall' THEN "Score" ELSE 0 END) AS "Fall",
    SUM(CASE WHEN "Season" = 'Winter' THEN "Score" ELSE 0 END) AS "Winter",
    SUM(CASE WHEN "Season" = 'Spring' THEN "Score" ELSE 0 END) AS "Spring"
FROM "mytable"
GROUP BY "Name"

是否使用 SUM() 取决于您和您的数据的外观。如果每个 (Name, Season) 对有一行,那么 SUM() 将与 MAX()< 一样有效

关于数据库 |根据条件将列查看为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48332125/

相关文章:

mysql - 结果包含多行

postgresql - 如何从命令行以 CSV 或 TSV 格式打印 PostgreSQL 查询的结果?

postgresql - 为什么函数内部的查询不能正常工作?

PostgreSQL : NOT VALID constraint vs validation trigger

postgresql 选择具有最小值的行

java - 图像未存储在 postgres 中

mysql - 如果存在则更新表否则插入

sql - 从多个表插入到一个表中(唯一性除外)

java - 从数据库中删除特定值

mysql - SQL查询: Delete all records from the table except latest N?