非聚合枢轴

时间:2014-08-10 12:35:34

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

我有一张这样的表:

╔════════╦═══╦═══╦═══╦═══╦═══╗
║ 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 ║
╚════════╩═══╩═══╩═══╩═══╩═══╝

我想" pivot"该表用于获取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中设置了示例数据。

谢谢!

2 个答案:

答案 0 :(得分:1)

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

UPD:哦,我看到你发现了它。

答案 1 :(得分:0)

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

我找到了答案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