Итак, чтобы не мешать, из-за структуры я остаюсь в ситуации, когда пытаюсь отсортировать некоторые столбцы данных в SQL таким образом, чтобы это ускользало от меня. Проблема в том, что мне нужно несколько наборов из 2 столбцов, отсортированных независимо, например, у меня есть что-то вроде этого:
Name | Val1 | Name | Val2 | Name | Val3 A | 2 | A | 1 | A | 3 B | 1 | B | 3 | B | 2 C | 3 | C | 2 | C | 1
и мне нужно, чтобы таблица была отсортирована по наивысшему из каждого значения:
Name | Val1 | Name | Val2 | Name | Val3 C | 3 | B | 3 | A | 3 A | 2 | C | 2 | B | 2 B | 1 | A | 1 | C | 1
Кажется, я не знаю, как организовать с помощью ROW_NUMBER () и различных других вещей, которые я сделал с помощью долгих поисков, имея возможность разделять отдельные столбцы для заказа, но я не знаю, как я могу сохранить два связанных, в то время как другие сортируют независимо , Может кто поможет? Обновлено: Данные экстраполируются из одной таблицы после того, как были произведены расчеты для их значений. Скажем, у меня есть таблица:
Name | Val1 | Val2 | Val3 | A | 2 | 1 | 3 | B | 1 | 3 | 2 | C | 3 | 2 | 1 |The values are names specifically are just used for example, but are wildly Differing values. So from that table of final results i need to get the results in the format that the name with the highest value will be on top for each individual value SELECT Name AS N1, Val1, Name As N2, Val2 etc EDIT: Example:
Name1|Units|Name2|Units| Name3|Units AF |218 |AF |0.83 | AF |1.04 AD |172 |AD |0.49 | AD |1.05 AF |116 |AF |0.87 | AF |1.06 AF |324 |AF |0.84 | AF |1.10
Они извлекаются из таблицы, получая общие данные, а затем создают из нее подтаблицу в желаемом формате, поэтому я могу получить первый приведенный пример таблицы, но у меня возникают проблемы с его надлежащей сортировкой. хотя список имен такой же, они, например, Name1, Name2
Как получить первый стол?
Выберите имя как N1, Val1, имя как N2, Val2, имя как N3, Val3 из таблицы
Судя по их комментарию ниже «Однако эти данные предназначены для таблицы« лиги »как сортировки, поэтому числа приведены только для примера, но могут сильно различаться, поэтому таблица не может быть объединена по значению, поскольку они идут с двумя десятичными знаками», кажется, что данные, предоставленные нам OP, не являются репрезентативными для их реальных данных. Таким образом, на данный момент ответить на этот вопрос невозможно.
Прошу прощения, с неясным объяснением, что могло бы упростить задачу, зная, что значения могут быть в любом диапазоне от 0 до 100 000? просто указанные значения связаны с конкретными именами
Предоставьте нам данные, представляющие ваши данные, в том виде, в котором они находятся.
Вы сказали в вашем комментарии ниже "поэтому числа приведены только для примера, но могут сильно различаться, поэтому таблица не может быть объединена по значению, поскольку они идут с двумя десятичными знаками". Вы поставляете int. Что правильно? Если это не целые числа, и мы не можем выполнить JOIN для этих значений, почему вы указываете значение int, которое является явным кандидатом на JOIN?
Прошу прощения, я пытался передать то, что сами числа должны быть независимо упорядочены от наибольшего к наименьшему и чтобы соответствующее имя соответствовало указанному значению, поэтому я считал, что рассматриваемые числа не имеют отношения


Если я правильно понял ваш вопрос, рассмотрите следующий подход:
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
ИДЕАЛЬНО! большое спасибо: D я был близок к этому, но не мог как следует разобрать в голове
У вас В самом деле есть 3 столбца с именем
[name]? В таблице не может быть 2 (или более) столбцов с одинаковым именем. На самом деле это 3 разные таблицы, а не 1?