T-SQL查询表重新排序数据

Posted

技术标签:

【中文标题】T-SQL查询表重新排序数据【英文标题】:T-SQL query table to re-sort data 【发布时间】:2021-06-21 12:14:58 【问题描述】:

我正在尝试想出一种翻译以下数据的方法:

ID F1 F2 F3 F1% F2% F3%
ID1 ID1F1Value ID1F2Value ID1F3Value ID1F1%Value ID1F2%Value ID1F3%Value
ID2 ID2F1Value ID2F2Value ID2F3Value ID2F1%Value ID2F2%Value ID2F3%Value

进入以下

ID1 F %
ID1 ID1F1Value ID1F1%Value
ID1 ID1F2Value ID1F2%Value
ID1 ID1F3Value ID1F3%Value
ID2 ID2F1Value ID2F1%Value
ID2 ID2F2Value ID2F2%Value
ID2 ID2F3Value ID2F3%Value

我正在考虑将它导出到 EXCEL 以运行 VBA 来处理它,经过数小时尝试使用 SQL 来解决这个问题......希望 SQL 大师可以用一个惊人的解决方案启发我。

非常感谢!

【问题讨论】:

【参考方案1】:

您正在寻找一个 unpivot 而不是 pivot

您可以使用CROSS APPLY (VALUES 取消透视。

SELECT
   t.ID,
   v.F,
   v.[%]
FROM YourTable t
CROSS APPLY (VALUES
    (F1, [F1%]),
    (F2, [F2%]),
    (F3, [F3%])
) v (F, [%]);

在某些情况下,您也可以使用UNPIVOT 运算符,但它可能不太灵活。

【讨论】:

非常感谢。另一个惊人的解决方案!【参考方案2】:

一种方法使用联合所有:

SELECT ID AS ID1, F1 AS F, [F1%] AS [%]
UNION ALL
SELECT ID, F2, [F2%]
UNION ALL
SELECT ID, F3, [F3%];

【讨论】:

为什么要扫描表3次? 这太棒了!如此简单和优雅!我的 SQL 之旅还有很长的路要走。

以上是关于T-SQL查询表重新排序数据的主要内容,如果未能解决你的问题,请参考以下文章

T-SQL 数据库数据的高级查询

T-SQL 查询将数据插入到具有可变列数的表中

T-SQL查询——深入理解索引,原理(B树)

2017-3-10 SQL server T-sql语句 高级查询

T-SQL查询语句

T-SQL进阶02.理解SQL查询的底层原理