【问题标题】:T-SQL query table to re-sort dataT-SQL查询表重新排序数据
【发布时间】: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 大师可以用一个惊人的解决方案启发我。

非常感谢!

【问题讨论】:

    标签: sql sql-server tsql unpivot


    【解决方案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 之旅还有很长的路要走。
    猜你喜欢
    • 2022-09-22
    • 2019-06-24
    • 1970-01-01
    • 2018-08-06
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多