【问题标题】:Dynamic multiple PIVOT on numeric column数字列上的动态多个 PIVOT
【发布时间】:2021-05-27 13:38:56
【问题描述】:

我有一个表格,里面有类似的数据

并且我想将类别(可以增加/减少)列与期间列进行枢轴,并且还希望将 sold_amt、purchase_price、gross_profit 作为行,请参阅所需的图像

提前致谢。

请找到

的create和insert语句
CREATE TABLE temp_key_category (
    category_code varchar(30),
    sold_amt DECIMAL(12,4), 
    purchase_price DECIMAL(12,4), 
    gross_profit DECIMAL(12,4),
    item_qty DECIMAL(12,2),  
    period VARCHAR(100),
    salesperson_code VARCHAR(100),
    salesperson_name VARCHAR(100)
);

插入-

INSERT INTO temp_key_category values('BICEGO',  17433.0000, 16740.0000, 3.9752, 8.00,   'Rolling 12 Periods',   166,    'Ben Ehrmann')
INSERT INTO temp_key_category values('BRIDAL',  1533.0000,  1680.0000,  3.0,    5.00,   'Rolling 12 Periods',   116,    'Anthony')
INSERT INTO temp_key_category values('BRIDAL',  5533.0000,  1590.0000,  3.5,    5.00,   'Current Period',   116,    'Anthony')
INSERT INTO temp_key_category values('LOOSE DIAMONDS',  69131.0000, 39117.4000, 43.4155,    5.00,   'Current Period',   116,    'Anthony')  
INSERT INTO temp_key_category values('LOOSE DIAMONDS',  8131.0000,  3517.4000,  43.458, 5.00,   'Rolling 12 Periods',   116,    'Anthony')  
INSERT INTO temp_key_category values('YURMAN',  7131.0000,  3517.4000,  43.458, 5.00,   'Rolling 12 Periods',   116,    'Kiley')    


select * from temp_key_category

【问题讨论】:

  • 请提供表结构和示例数据的插入语句,而不是图像,以重新创建表。
  • 嗨@KaziMohammadAliNur,问题已编辑。
  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。

标签: sql sql-server-2008 sql-server-2012 ssms-2016 dynamic-pivot


【解决方案1】:

这是您的动态支点:

 DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)
    
SET @cols = STUFF((SELECT distinct ',' + quotename(concat(category_code,'_',period))
            FROM temp_key_category 
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
               
            
       
set @query = 'select salesperson_code, ' + @cols + ' from 
            (
  select c.salesperson_code  ,
  SalesOrPurchase,concat(category_code,''_'',period)cetegoryperiod
from temp_key_category
cross apply
(
  select concat(salesperson_code,''_'',''sold_amt''), sold_amt union all
  select concat(salesperson_code,''_'',''purchase_price''), purchase_price 
  
) c (salesperson_code , SalesOrPurchase)

) x
            pivot 
            (
              sum(salesorpurchase)
  for cetegoryperiod in (' + @cols + ')

            ) p 
            group by salesperson_code ,' + @cols 


execute(@query);

输出:

【讨论】:

  • 非常感谢 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多