根据列值动态获取列名

Posted

技术标签:

【中文标题】根据列值动态获取列名【英文标题】:Get column name based on column value dynamically 【发布时间】:2019-04-30 10:05:55 【问题描述】:

我有一个表格,其中包含“用户名”、“品牌”和“价值”作为列。每个经理和他们的同事最多负责 3 个品牌,这些品牌可以从经理换到经理。现在用户名、品牌和它们的值是如下的行格式。

           User Name    Brand Name  Value
             User 1             Puma    10
             User 1            Adidas   20
             User 1             Nike    30
             User 2             Puma    40
             User 2           Adidas    50
             User 2             Nike    60
             User 3             Puma    70
             User 3           Adidas    80
             User 3             Nike    90  

使用我在下面实现的“案例”,但问题是,这些品牌可以根据经理而改变。例子。经理 -1 可以负责 Puma、耐克、阿迪达斯,但经理 -2 可以负责 X、Y、Z 品牌。

            User Name   Brand -1    Brand -2  Brand -3
             User 1       10      20        30
             User 2       40      50        60
             User 3       70      80        90

我想要的状态是以列格式获取品牌名称,如下所示。

对于经理 - 1

            User Name   PUMA      ADIDAS      NIKE
             User 1          10    20              30
             User 2          40    50              60
             User 3          70    80              90

对于经理 -2

            User Name    X      Y       Z
             User 1          10    20       30
             User 2          40    50       60
             User 3          70    80       90

我希望将实际的 3 个品牌名称作为动态列,而不是 Brand-1、Brand-2、Brand -3。我可以硬编码这些品牌名称,但正如我所说,它们可能因经理而异,但每次只有一位经理。

【问题讨论】:

您是如何存储经理信息的? 我正在使用 Postgres SQL。 @ch2019 我的报告将经理 ID 作为参数。所以一次一位经理(一次 3 个品牌)。 【参考方案1】:

旋转可以通过多种方式实现,

1) 使用数据透视函数 2)使用XML函数 3) 动态 SQL 4) 使用游标

假设您使用的是 Oracle SQL 数据库,以上所有内容都适用,请对以上内容进行更多调查。如果上述其他选项很少与您的数据库工具相关的其他选项一起适用。

【讨论】:

我正在使用 Postgres SQL

以上是关于根据列值动态获取列名的主要内容,如果未能解决你的问题,请参考以下文章

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

foreach属性-动态-mybatis中使用map类型参数,其中key为列名,value为列值

通过特定行值动态获取列名

如何从 SQL 表中动态获取单元格值?

在 Oracle SQL 中生成动态列值