因此,为了避免麻烦,由于结构原因,我处于一种试图以逃避我的方式对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 |
答案 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