在 SQL 中创建名称列

Posted

技术标签:

【中文标题】在 SQL 中创建名称列【英文标题】:Make name column in SQL 【发布时间】:2019-08-06 10:46:52 【问题描述】:

我正在寻找一种在 SQL 中将行转换为列的有效方法。列的名称可以取决于行的变化吗?这是我的例子:

名表电影和访客

Id | film
0  | comedy 
1  | horror 
2  | drama
Id | visitors
0  | 3
1  | 10
2  | 4
0  | 8
1  | 5
2  | 1

我必须当前喜剧、戏剧、恐怖的总和,其中列名反映了当前使用的电影类别。我不知道怎么写。。你能写这个吗?请

【问题讨论】:

同时指定预期结果。并向我们​​展示您当前的查询尝试。 这两个答案做出了不同的事情,因为不太清楚您的期望。请澄清并添加一些预期的输出 【参考方案1】:

我很确定你只想要 joingroup by

select f.film, sum(v.visitors)
from visitors v left join
     film f
     on v.id = f.id
group by f.film;

如果这是您想要的,这是一个基本的 SQL 查询。 JOIN 是一个基本概念,您应该花一些时间学习 SQL。有许多书籍、教程、视频和其他资源可用于此目的。

【讨论】:

有趣,不同的解释 :) 在我看来,“将行转换为列”这句话触发了枢轴。但也许你是对的,这是基本的。也许 TO 增加了预期的输出......【参考方案2】:

对于静态 3 类:

demo:db<>fiddle

SELECT
    SUM(visitors) FILTER (WHERE id = 0) AS comedy, 
    SUM(visitors) FILTER (WHERE id = 1) AS horror, 
    SUM(visitors) FILTER (WHERE id = 2) AS drama
FROM films

【讨论】:

如何更改脚本以使列的名称取决于电影类别的名称?例如,当有人为颤音器更改喜剧时,我将不得不手动更正列的名称。我怎么能不手动呢? @Nemezis 首先请告诉我们这是否是您在原则上所期望的结果? 是的,我正在寻找它。谢谢! @Nemezis 不幸的是,这在 Postgres 中并不是那么简单。但是你可以看看这个问题正在讨论的问题:***.com/questions/2099198/…

以上是关于在 SQL 中创建名称列的主要内容,如果未能解决你的问题,请参考以下文章

如何在报告中创建一个包含所有已检查列名称的列?

如何在 SQL Server 2008 中创建具有新名称的重复表

如何在 BigQuery SQL 中安全地参数化表/列名称?

如何在 ggplot 中创建一个图例,将名称和颜色分配给列而不是数据框列中的值?

在 Oracle SQL 中显示表的所有约束的名称

在 Azure 存储中创建文件列表并使用 ADF 将其发送到 sql 表