【问题标题】:Non-Aggregate Pivot [duplicate]非聚合枢轴[重复]
【发布时间】:2014-08-10 12:35:33
【问题描述】:

我有一张这样的桌子:

╔════════╦═══╦═══╦═══╦═══╦═══╗
║ row_id ║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║
╠════════╬═══╬═══╬═══╬═══╬═══╣
║      1 ║ T ║ E ║ S ║ N ║ U ║
║      2 ║ M ║ B ║ R ║ H ║ A ║
║      3 ║ C ║ D ║ F ║ G ║ I ║
║      4 ║ J ║ K ║ L ║ O ║ P ║
║      5 ║ V ║ W ║ X ║ Y ║ Z ║
╚════════╩═══╩═══╩═══╩═══╩═══╝

我想“旋转”表格以获得 row_id 列是第一行,1 列是第二行等结果。
结果应如下所示:

╔════════╦═══╦═══╦═══╦═══╦═══╗
║ row_id ║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║
╠════════╬═══╬═══╬═══╬═══╬═══╣
║      1 ║ T ║ M ║ C ║ J ║ V ║
║      2 ║ E ║ B ║ D ║ K ║ W ║
║      3 ║ S ║ R ║ F ║ L ║ X ║
║      4 ║ N ║ H ║ G ║ O ║ Y ║
║      5 ║ U ║ A ║ I ║ P ║ Z ║
╚════════╩═══╩═══╩═══╩═══╩═══╝

我一直在寻找关于在没有聚合的情况下进行透视但运气不佳的想法,主要是因为我想要透视的数据是非数字的。
我已经在SQL Fiddle中设置了示例数据。

谢谢!

【问题讨论】:

  • 您可以编辑以显示您需要的最终结果吗?从你的描述中看不太清楚。

标签: sql-server string sql-server-2008 transpose


【解决方案1】:

您需要的称为“矩阵转置”。最佳 SQL 查询将在很大程度上取决于您存储数据的实际方式,因此如果您提供更真实的表结构示例,也不会受到影响。你确定你需要使用的所有矩阵都是 5*5 吗? :)

UPD:哦,我知道你找到了。

【讨论】:

  • 其实答案是肯定的,永远都是5*5。 :-)
【解决方案2】:

我意识到我的错误是寻找支点而不是转置。

我找到了答案here,并通过以下查询解决了问题:

SELECT * 
FROM   (SELECT row_id, 
               col, 
               value 
        FROM   table1 
               UNPIVOT ( value 
                       FOR col IN ([1], 
                                   [2], 
                                   [3], 
                                   [4], 
                                   [5]) ) unpiv) src 
       PIVOT ( Max(value) 
             FOR row_id IN ([1], 
                            [2], 
                            [3], 
                            [4], 
                            [5]) ) piv 

结果在 SQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多