尝试在 T-SQL 中转置和创建枢轴

Posted

技术标签:

【中文标题】尝试在 T-SQL 中转置和创建枢轴【英文标题】:Trying to transpose and create pivot in T-SQL 【发布时间】:2015-11-23 14:38:26 【问题描述】:

我正在努力使用 unpivot 和 pivot 命令,但不能完全正确。 我想使用 Transact SQL 从表 1 转置到表 2:

click here to see my source and destination tables

我怎样才能做到这一点?到目前为止,我得到了这个:

SELECT  CASE RIGHT(name, 1) WHEN  'R' THEN CONVERT(nvarchar(6), Q) + 'R' 
                            WHEN  'D' THEN CONVERT(nvarchar(6), Q) + 'D' 
                            ELSE           CONVERT(nvarchar(6), Q) + 'A' END AS Q1, 
                            value, name
FROM    (SELECT Q, a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD
            FROM vw_VAT) src 
            unpivot (value FOR name IN (a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD)) sel
            pivot ???

但是我无法正确使用 pivot 命令。 有人可以帮帮我吗?

BR,emphyrio

【问题讨论】:

请至少以文本而不是图片的形式创建您的示例,如果您需要更快的帮助,请在 SQL Fiddle 中创建一个示例。 我自己解决了这个难题,使用这个 T-SQL: 【参考方案1】:

我自己解决了这个难题,使用这个 T-SQL:

SELECT * FROM (
SELECT  CASE RIGHT(name, 1) WHEN  'R' THEN CONVERT(nvarchar(6), Q) + 'R' 
                            WHEN  'D' THEN CONVERT(nvarchar(6), Q) + 'D' 
                            ELSE           CONVERT(nvarchar(6), Q) + 'A' END AS Q1,
        CASE RIGHT(name, 1) WHEN  'R' THEN LEFT(name, LEN(name) -1) 
                            WHEN  'D' THEN LEFT(name, LEN(name) -1) 
                            ELSE           name END AS name,  
                            value                               
FROM    (SELECT Q, a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD
            FROM vw_VAT) src 
            unpivot (value FOR name IN (a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD)) up) main
            pivot (SUM(value) FOR Q1 IN ([201501A], [201502A], [201503A], [201504A], [201501R], [201502R], [201503R], [201504R], [201501D], [201502D], [201503D], [201504D])) piv

现在唯一剩下的就是动态地改变 pivot 命令的 IN 子句。但这很容易,现在我找到了解决方案。

Emphyrio。

【讨论】:

以上是关于尝试在 T-SQL 中转置和创建枢轴的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Google Apps 脚本中转置和拆分?

在Python中转置和乘以列表

T-SQL - 如何在LIKE子句中转义斜杠/方括号

T-SQL 动态枢轴无法正常工作

嗨,我想在 pyspark 中转置一个数据框

sql 如何在T-SQL中转义百分比符号