微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在一列但重命名为Dynamics列的sql server上进行数据透视

如何解决如何在一列但重命名为Dynamics列的sql server上进行数据透视

我有一张价格表,包括参考价格,价格类别(例如专业人士/客户...),重量和价格 每篇文章都有X行表示相同的参考,价格类别取决于重量 我想退货并提供参考,价格类别,Price1,Price2 ... 我尝试调整找到的代码,但链接权重和命名列PRIX1,PRIX2 ...出现问题。

declare @MAxcols as int  
DECLARE @cols AS NVARCHAR(MAX)='';
/*max of differents price=max columns dynamic to add*/
set @Maxcols = (select  max(NBLignes) from (select  count(*) as NBLignes
FROM [Z_TARIFS_VENTE] as Results 
GROUP BY AR_REF,Cat_Prx) as tmp)

/*Build all dynamic columns */
DECLARE @cnt INT = 0;
WHILE @cnt < @Maxcols
BEGIN
  SET @cols = @cols  + 'PRIX' + cast(@cnt+1 as nvarchar(3)) + ','
  SET @cnt = @cnt + 1;
END
SET @cols=LEFT(@cols,LEN(@cols) - 1)/*remove last,= 'PRIX1,PRIX2,PRIX3...PRIXX'*/
DECLARE @query AS NVARCHAR(MAX);
SELECT @query =
'SELECT
[AR_Ref],[Cat_Prx],' + @cols + '
FROM (
Select
  [AR_Ref],[weight],[PRIX] 
From
    [Z_TARIFS_VENTE]
) t
PIVOT 
(
Sum(PRIX)
FOR weight IN( ' + @cols + ' )' +/* Here my problem*/
' ) AS p; ';
Execute(@query);

我不希望每个权重都在单独的列中,而仅在Prix1,prix2上进行分类...

解决方法

最后...强行尝试 我在表格上创建一个视图,其中行号基于我的分组依据

 ROW_NUMBER() OVER (PARTITION BY [AR_Ref],[Cat_Prx]...)

AND在存储过程中

declare @MAxcols as int  
set @Maxcols = (select  max(NBLignes) from (select  count(*) as NBLignes
FROM [Z_TARIFS_VENTE] as Results 
GROUP BY AR_REF,EG_Enumere,TQ_RefCF) as tmp)
DECLARE @query AS NVARCHAR(MAX);
SET @query ='SELECT [AR_Ref],[EG_Enumere],[TQ_RefCF]'
DECLARE @cnt INT = 1;
WHILE @cnt < @Maxcols + 1
BEGIN
 SET @query = @query  + ',CASE WHEN IdxRow=' + CAST(@cnt as nvarchar(3)) + ' THEN PRIX ELSE NULL END AS PRIX' + CAST(@cnt as nvarchar(3))
SET @cnt = @cnt + 1;
END
SET @query = @query  + ' FROM Z_TARIFS_VENTE_ROWNUM'
EXECUTE sp_executesql @query

现在,我只需要按添加的每一列进行分组,然后将Max(Prix1)设置为prix1,...始终使用可变字符串

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。