MS SQL Server多列独立排序

时间:2018-12-06 10:30:20

标签: sql sql-server sql-order-by

因此,为了避免麻烦,由于结构原因,我处于一种试图以逃避我的方式对SQL中的某些数据列进行排序的情况。 问题是我需要多套2列进行独立排序,例如,我有这样的东西:

# EXTRA: Enforce trailing slash. Ignore trailing slash on file endings 
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteCond %{REQUEST_FILENAME} !\.(gif|jpg|png|jpeg|css|js|xml|rss|txt)$ [NC]
RewriteCond %{REQUEST_URI} !\.(gif|jpg|png|jpeg|css|js|xml|rss|txt)$ [NC]
RewriteRule ^(.*[^/])$ /$1/ [L,R=301]

并且我需要按每个值中的最高值对表格进行排序:

   Name | Val1 | Name | Val2 | Name | Val3
   A    |  2   | A    | 1    | A    | 3
   B    |  1   | B    | 3    | B    | 2
   C    |  3   | C    | 2    | C    | 1

我似乎不知道如何使用ROW_NUMBER()进行组织,以及通过长时间搜索能够分离出各个列以进行排序的其他方式,但是我不知道如何在保持链接的同时保持两个链接其他人独立整理,有人可以帮忙吗? 编辑: 在计算完它们的值之后,从一张表中推断出数据。 所以说我有我的桌子:

   Name | Val1 | Name | Val2 | Name | Val3
   C    |  3   | B    | 3    | A    | 3
   A    |  2   | C    | 2    | B    | 2
   B    |  1   | A    | 1    | C    | 1
     

这些值是专门用于举例的名称,但是它们之间存在很大的差异。   因此,从最终结果表中,我需要以以下格式获取结果:对于每个单独的值,具有最高值的名称将放在顶部          选择名称AS N1,          Val1,          名称为N2          Val2    等等   编辑:示例:

   Name | Val1 | Val2 | Val3 | 
   A    |  2   | 1    | 3    | 
   B    |  1   | 3    | 2    |
   C    |  3   | 2    | 1    | 

1 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,请考虑以下方法:

CREATE TABLE #NameValue (
    Name varchar(10),
    Val1 int,
    Val2 int,
    Val3 int
)

INSERT INTO #NameValue 
VALUES
    ('A', 102, 201, 303),
    ('B', 101, 203, 302),
    ('C', 103, 202, 301);

WITH nv1 AS (
    SELECT Name, Val1, ROW_NUMBER() OVER (ORDER BY Val1 DESC) AS RN1
    FROM #NameValue
),
nv2 AS (
    SELECT Name, Val2, ROW_NUMBER() OVER (ORDER BY Val2 DESC) AS RN2
    FROM #NameValue
),
nv3 AS (
    SELECT Name, Val3, ROW_NUMBER() OVER (ORDER BY Val3 DESC) AS RN3
    FROM #NameValue
)
SELECT 
    nv1.Name AS Name1, nv1.Val1, 
    nv2.Name AS Name2, nv2.Val2,
    nv3.Name AS Name3, nv3.Val3
FROM nv1
LEFT JOIN nv2 ON (nv1.RN1 = nv2.RN2)
LEFT JOIN nv3 ON (nv1.RN1 = nv3.RN3)

输出:

Name1   Val1    Name2   Val2    Name3   Val3
C       103     B       203     A       303
A       102     C       202     B       302
B       101     A       201     C       301