【发布时间】:2017-05-09 09:13:06
【问题描述】:
我正在寻找一种方法来动态或自动命名下面我的案例语句中的列。情景 - 我试图找出每个国家/地区有多少不同行业的不同公司。国家是行,而类别是列。
我正在使用 postgressql,因此 pivot 无法工作,而且我没有足够新的版本来使用交叉表
我希望能够将其复制到更大的场景中,这样我就不必像在这里那样担心对 cat_nbr 和列名进行“硬编码”。
SELECT country,
count(CASE WHEN cat_nbr = 1 THEN company_code END) retail,
count(CASE WHEN cat_nbr = 2 THEN company_code END) finance,
count(CASE WHEN cat_nbr = 3 THEN company_code END) oil,
count(CASE WHEN cat_nbr = 4 THEN company_code END) tech
FROM global_companies
GROUP BY country
表结构格式如果不清楚有这些列:
country - cat_nbr - company_code - cat_desc.
Cat_desc 是我硬编码“零售”、“金融”等词的地方
就我对每个 cat_nbr/cat_desc 的引用而言,我是否可以通过更少的硬编码来做到这一点?有很多很多的 cat_nbrs 和 cat_descs。
【问题讨论】:
-
Postgresql 版本?你有一张桌子 cat_nbr?
-
您需要创建一个函数并创建一个类似于this 的动态查询,但您将在类别表之间循环。
-
@JuanCarlosOropeza。 Cat_nbr 和零售/金融齐头并进。例如,类别#1 = 零售,#2 = 金融等。将正在发生的事情转化为文字。版本是 7s 中的东西,无法准确检查 atm。
-
但是你有那些在一个表中或在其他地方是不变的?
标签: sql postgresql case transpose