Sort-n-Concatenate 5列的最佳方法

时间:2010-05-11 20:34:10

标签: sql sql-server sql-server-2008 sorting

  

!!!警告!!!

     

最亲密的SQL专家,请继续阅读之前开始尖叫。   这个超级非规范化的表结构是   申请后获得一些   组合 - 糖很好地归一化   数据集:)。我正在避免   重新规范化这个结果集,因为我   想要保持简单完整   过程(也不会使用此数据   在应用程序的另一个地方)。 (是的,Codd。我知道你在想什么)。


有五列包含数值

 A | B | C | D | E
-------------------
 2 | 3 | 4 | 1 | 5
 3 | 6 | 1 | 5 | 4
 4 | 5 | 7 | 1 | 3

我希望在排序后获取值的串联:

   ABCDE
-----------
 1 2 3 4 5
 1 3 4 5 6
 1 3 4 5 7

最好的方法是什么?

1 个答案:

答案 0 :(得分:3)

回顾过为什么你需要这样做的严肃问题,虽然很尴尬,但可以实现:

Select ...
    , Stuff(
            (
            Select ' ' + Z.Col
            From    (
                    Select PKCol, A As Col From Table
                    Union All Select PKCol, B From Table
                    Union All Select PKCol, C From Table
                    Union All Select PKCol, D From Table
                    Union All Select PKCol, E From Table
                    ) As Z
            Where Z.PKCol = Table.PKCol
            Order By Col
            For Xml Path('')
            ), 1, 1, '') As Combined
From Table

显然,数据库从未被设计为对列进行排序,这就是解决方案难以实现的原因。