假设我一个表有一行数据如下:
A       B       C        D       E        F       G
2.2    3.3      4.4      5.5    1.1       7.3    8.9
自定义一个函数对这一行数据进行排序:使其变成这样的形式
A       B       C        D       E        F       G
2.2    3.3      4.4      5.5    1.1       7.3    8.9
6       5        4       3       6        2       1

解决方案 »

  1.   


    --> 生成测试数据表: [tb]
    IF OBJECT_ID('[tb]') IS NOT NULL
    DROP TABLE [tb]
    GO
    CREATE TABLE [tb] ([A] [numeric](2,1),[B] [numeric](2,1),[C] [numeric](2,1),[D] [numeric](2,1),[E] [numeric](2,1),[F] [numeric](2,1),[G] [numeric](2,1))
    INSERT INTO [tb]
    SELECT '2.2','3.3','4.4','5.5','1.1','7.3','8.9'-->SQL查询如下:
    SELECT * FROM [tb]
    UNION ALL
    SELECT *
    FROM (
    SELECT rn = ROW_NUMBER()OVER(ORDER BY val DESC), col 
    FROM tb 
    UNPIVOT(val FOR col IN (a, b, c, d, e, f, g))b
    ) t
    PIVOT (MAX(rn) FOR col IN(A,B,C,D,E,F,G)) c
    /*
    A                                       B                                       C                                       D                                       E                                       F                                       G
    --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- ---------------------------------------
    2.2                                     3.3                                     4.4                                     5.5                                     1.1                                     7.3                                     8.9
    6.0                                     5.0                                     4.0                                     3.0                                     7.0                                     2.0                                     1.0(2 行受影响)
    */