postgresql在case语句中动态命名列
我正在寻找一种在下面的case语句中动态或自动命名列的方法。情景——我试图找出每个国家有多少不同行业的不同公司。国家是行,类别是列 我正在使用postgressql,所以pivot无法工作,而且我没有足够新的版本可以使用交叉表 我希望能够将其复制到更大的场景中,在这些场景中,我不必像这里一样担心“硬编码”cat_nbr和列名postgresql在case语句中动态命名列,sql,postgresql,case,transpose,Sql,Postgresql,Case,Transpose,我正在寻找一种在下面的case语句中动态或自动命名列的方法。情景——我试图找出每个国家有多少不同行业的不同公司。国家是行,类别是列 我正在使用postgressql,所以pivot无法工作,而且我没有足够新的版本可以使用交叉表 我希望能够将其复制到更大的场景中,在这些场景中,我不必像这里一样担心“硬编码”cat_nbr和列名 SELECT country, count(CASE WHEN cat_nbr = 1 THEN company_code END) retail,
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?有很多分类号和分类号。您无法创建具有动态行大小的查询。这是不可能的,即使是交叉表 但是你可以
\crosstabview
的内容您可以在我的问题中阅读更多有关这方面的信息。您不能创建具有动态行大小的查询。这是不可能的,即使是交叉表 但是你可以
\crosstabview
的内容在我的问题中,您可以阅读有关这方面的更多信息。您可以对列的国家名称进行硬编码,而不是硬编码类别名称,并让行像往常一样动态
SELECT cat_nbr,
COUNT(CASE WHEN Country = 'US' THEN company_code END) AS NumUS,
COUNT(CASE WHEN Country = 'UK' THEN company_code END) AS NumUK,
COUNT(CASE WHEN Country = 'FR' THEN company_code END) AS NumFR,
...
FROM global_companies
GROUP BY cat_nbr;
另一种选择是,您可以将数据聚合到JSON或数组结构中。您可以对列的国家名称进行硬编码,而不是硬编码类别名称,并让行像往常一样动态
SELECT cat_nbr,
COUNT(CASE WHEN Country = 'US' THEN company_code END) AS NumUS,
COUNT(CASE WHEN Country = 'UK' THEN company_code END) AS NumUK,
COUNT(CASE WHEN Country = 'FR' THEN company_code END) AS NumFR,
...
FROM global_companies
GROUP BY cat_nbr;
另一种选择是可以将数据聚合到JSON或数组结构中。Postgresql版本?您有一个表catu_nbr?您需要创建一个函数并创建一个类似于的dinamic查询,但您将在类别表之间循环。@JuanCarlosOropeza。Cat_nbr和零售/金融一起进行。例如,类别#1=零售,#2=金融等。将发生的事情翻译成文字。版本是7s中的东西,不能精确地检查atm。但是你在一个表中有它们,或者在其他地方是常量?Postgresql版本?您有一个表catu_nbr?您需要创建一个函数并创建一个类似于的dinamic查询,但您将在类别表之间循环。@JuanCarlosOropeza。Cat_nbr和零售/金融一起进行。例如,类别#1=零售,#2=金融等。将发生的事情翻译成文字。版本是7的,不能精确地检查atm。但是你在表中有这些,或者在其他地方是恒定的?