【问题标题】:Pivot table multiple column values in a single column数据透视表在单个列中的多个列值
【发布时间】:2013-12-25 12:12:17
【问题描述】:

我有一张这样的桌子,

id  PID       VID    Type        PriceA  PriceB
41  297       2      128         70.000  80.000 
42  297       3      256         90.000  100.000    
43  297       4      300        110.000  120.000    
44  297       5      400        130.000  140.000    
45  294       2      128         10.000  50.000 
46  294       3      256         20.000  60.000 
47  294       4      300         30.000  70.000 
48  294       5      400         40.000  80.000
49  294       6      450         50.000  85.000
50  294       7      470         45.000  75.000

我想要做的是一个带有PID参数的查询并得到这样的结果

PID  |        128       |         256       |        300         |        400      
297  | 70.000 / 80.0000 |  90.000 / 100.000 | 110.000 / 120.000  | 130.000 / 140.000 

我尝试了几种不同的选项,数据透视表子查询等,但我做不到。

【问题讨论】:

    标签: sql .net sql-server tsql pivot


    【解决方案1】:

    这是完整的工作示例:

    CREATE TABLE DataSource
    (
        [ID] TINYINT
       ,[PID] SMALLINT
       ,[VID] TINYINT
       ,[Type] SMALLINT
       ,[PriceA] VARCHAR(32)
       ,[PriceB] VARCHAR(32)
    )
    
    INSERT INTO DataSource ([ID],[PID],[VID],[Type],[PriceA],[PriceB])
    VALUES (41,297,2,128,70.000,80.000)
          ,(42,297,3,256,90.000,100.000)    
          ,(43,297,4,300,110.000,120.000)    
          ,(44,297,5,400,130.000,140.000)    
          ,(45,294,2,128,10.000,50.000) 
          ,(46,294,3,256,20.000,60.000) 
          ,(47,294,4,300,30.000,70.000) 
          ,(48,294,5,400,40.000,80.000)
          ,(49,294,6,450,50.000,85.000)
          ,(50,294,7,470,45.000,75.000)
    
    SELECT *
    FROM 
    (
       SELECT [PID]
             ,[Type]
             ,[PriceA] + ' / ' + [PriceB] AS [Price]
       FROM DataSource
    ) AS DataSource
    PIVOT
    (
      MAX([Price]) FOR [Type] IN ([128],[256],[300],[400],[450], [470])
    ) PVT
    

    输出是这样的:

    我们的想法是构建[PriceA] + ' / ' + [PriceB] 列,然后制作支点。

    请注意,我已经硬编码了可能的 [Type] 值。如果您需要使这个动态化,您可以构建一个动态的PIVOT 构建SQL 字符串,然后使用sp_executesql 过程执行它,就像完成here 一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      相关资源
      最近更新 更多