2017-02-14 5 views
-1

Моя проблема заключается в том, чтобы упорядочить эти результаты таким образом, чтобы порядок был таким, как он обозначен серым.Проблемы с сортировкой данных из SQL Server

То есть, чтобы получить каждую первую разницу в колонке EjeY.

enter image description here

+0

Как поле EjeY заказывается? Мне не кажется, что это сортировка. Как можно реплицировать результаты? – PrestonM

+0

Я считаю, что это проблема острова и щели. Если я понимаю, что вы имеете в виду, вам нужен запрос, который будет указывать, когда происходит определенное изменение для определенного поля, и принимая только те отдельные изменения, которые вы хотите продолжить сортировать. –

+0

Вы хотите отсортировать по: 'Valor' но * group wise *? – Shnugo

ответ

0

Может быть вы ищете это:

DECLARE @Dummy TABLE(ID INT IDENTITY, EjeY VARCHAR(100),Valor INT); 
INSERT INTO @Dummy VALUES 
('Alta/Deviciente',14) 
,('Baja/Baja',16) 
,('Baja/Media',14) 
,('Alta/Alta',8) 
,('Alta/Baja',12) 
,('Baja/Deviciente',18) 
,('Baja/Alta',12) 
,('Alta/Optima',6) 
,('Alta/Media',10) 
,('Baja/Optima',10); 

SELECT * 
FROM @Dummy AS d 
ORDER BY LEFT(EjeY,CHARINDEX('/',EjeY)-1),Valor DESC 

Результат

ID EjeY   Valor 
1 Alta/Deviciente 14 
5 Alta/Baja  12 
9 Alta/Media  10 
4 Alta/Alta  8 
8 Alta/Optima  6 
6 Baja/Deviciente 18 
2 Baja/Baja  16 
3 Baja/Media  14 
7 Baja/Alta  12 
10 Baja/Optima  10 
+0

ПОРЯДОК ПОЛЯ EJEY 1. ALTA/DEFICIENTE 2. BAJA/OPTIMA 3.DEFICIENTE/DEFICIENTE 4. MEDIA/ALTA 5. OPTIMA/DEFICIENTE –

+2

@DiegoLoaiza: ваш *** CAPS LOCK *** ключ *** STUCK *** ...... –

+0

что? (ваша кнопка CAPS LOCK - STUCK) –

0

Если вы хотите, чтобы записать изменения в левой части вашего Ejey разделителями поля то вам нужно разделить поле, а затем упорядочить ранжирование значений по идентификатору.

После того, как у вас есть рейтинг, вы можете выбрать записи, которые вы заинтересованы в принятии первой строки PARTITION.

DECLARE @Dummy TABLE(ID INT, EjeY VARCHAR(100),Valor INT); 
INSERT INTO @Dummy VALUES 
(1,'Alta/Deviciente',14) 
,(2,'Alta/Baja',12) 
,(6,'Baja/Optima',10) 
,(7,'Baja/Alta',12) 
,(11,'Deficiente/Deficiente',20) 
,(11,'Deficiente/Baja',18) 
,(16,'Media/Alta',10) 
,(17,'Media/Optima',8) 

--This запрос нарисует ранг в вашем данных на основе ВЛЕВО() раздел вашего значения поля Ejey.

SELECT 
    *, 
    RowNumber=ROW_NUMBER() OVER(PARTITION BY SortPart ORDER BY ID DESC) 
FROM 
(
    SELECT 
     ID, 
     SortPart=LEFT(EjeY,CHARINDEX('/',EjeY)-1), 
     Valor 
    FROM 
     @Dummy 
)AS X 

--This запрос будет в дальнейшем заказать только записи в пределах вашего идеального набора данных

SELECT 
    * 
FROM 
(
    SELECT 
     *, 
     RowNumber=ROW_NUMBER() OVER(PARTITION BY SortPart ORDER BY ID ASC) 
    FROM 
    (
     SELECT 
      ID, 
      SortPart=LEFT(EjeY,CHARINDEX('/',EjeY)-1), 
      Valor 
     FROM 
      @Dummy 
    )AS X 
)AS Y 
WHERE 
    RowNumber=1 

--Results A

ID SortPart Valor RowNumber 
2 Alta   12 1 
1 Alta   14 2 
7 Baja   12 1 
6 Baja   10 2 
11 Deficiente  20 1 
11 Deficiente  18 2 
17 Media   8 1 
16 Media   10 2 

--Results Аргументы B

ID SortPart Valor RowNumber 
1 Alta   14 1 
6 Baja   10 1 
11 Deficiente  20 1 
+0

ПОРЯДОК ПОЛЯ EJEY IS 1. ALTA/DEFICIENTE 2. BAJA/OPTIMA 3. ДЕФИЦИЕНТ/ДЕФИЦИЕНТ 4. MEDIA/ALTA 5. ОПТИМА/ДЕФИЦИЕНТ В моем столе 625 записей ... –

Смежные вопросы