动态根据列值获取列名

时间:2019-04-30 10:05:56

标签: sql postgresql pivot case

我有一个以“用户名”,“品牌”和“值”为列的表。每个经理及其同事对最大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可以负责彪马,耐克,阿迪达斯,但经理-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

对于Manager -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。我可以对这些品牌名称进行硬编码,但正如我所说的那样,每个经理可能会有所不同,但有时一个经理会有所不同。

1 个答案:

答案 0 :(得分:0)

可以通过多种方式实现数据透视

1)使用枢轴功能 2)使用XML功能 3)动态SQL 4)使用光标

假设您正在使用Oracle SQL数据库,则以上所有内容均适用,请对以上内容进行更多调查。如果不是上述情况,那么上述几种方法中的几种将与您的数据库工具的其他选项一起适用。