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查询表重新排序数据的主要内容,如果未能解决你的问题,请参考以下文章