无需存储过程即可将字段转换为行

时间:2011-05-10 14:17:44

标签: sql-server-2005 tsql view pivot common-table-expression

在sql server 2005的遗留表中,我有像这样定义的可自定义数据网格的设置

TotalColumn (int, null)
Column1Name (char(12), null)
Column2Name (char(12), null)
Column3Name (char(12), null)
Column4Name (char(12), null)
Column5Name (char(12), null)
Column1Type (int, null)
Column2Type (int, null)
...

其中TotalColumn是0-5的整数,表示总计哪一列。我想要将这些数据转换为按照索引排序的列定义列表,而不是构建一个模型对象模型,如下所示

public class LedgerColumn
{
    public int Index { get; set; }
    public bool IsVisible { get; set; }
    public string Name { get; set; }
    public LedgerColumnType ColumnType { get; set; }
    public bool IsTotaled { get; set; }
}

我想在不使用存储过程的情况下这样做。在过去,我使用cte完成数据操作,然后在视图中转动数据。我只是不确定如何将字段拆分成行而不执行类似

的操作
SELECT
    Column1Name,
    Column1Type,
    ...
FROM
    MyTable

UNION

SELECT
    Column2Name,
...

有些东西告诉我必须有一个更好的方法,我只是不确定如何去做它

1 个答案:

答案 0 :(得分:1)

听起来你想要做一个Pivot的反面 - 一个Unpivot!它们可能有些令人困惑,但我认为这就是你要找的东西。

来自MSDN's TSQL Pivot and Unpivot

  

UNPIVOT通过旋转列执行与PIVOT相反的操作   将表值表达式转换为列值。