Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Создание корректной сортивровки по определенному значению  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Добрый день.
Написал запрос.
Суть такова,что он выводит список ячеек по определенной сортировке.
  declare @material_id int =69887
  declare @MaterialUnit_id int =225693
  declare @BaseQuantity decimal(25,6)=1200.000000
  declare @SourceObject_id int =17310488
  declare @TechnoZone_id int =178
  declare @MaterialAccessGroup_id int =null
  declare @AllocationParameter_id int =null
  declare @IsPeace int =1

  select @MaterialAccessGroup_id = 
	case when @IsPeace = 1
	 then isnull(PCE_MaterialAccessGroup_id,isnull(MaterialAccessGroup_id,4))
											else isnull(MaterialAccessGroup_id,4) end,
		   @AllocationParameter_id = case @IsPeace /*@ComplectationArea_id*/ when 1 then AllocationParametersZSHO_id else AllocationParametersZKO_id end
	from Materials with (nolock) 
	where tid = @Material_id
  
   declare @Result table (
		tid int identity primary key,
		Location_id int not NULL,
		PutawayBaseQuantity decimal(25,6) NULL,
		IsEmpty int NULL,
		MaterialCount int NULL,
		FreedomBaseQuantity decimal(25,6)/*,
		SearchPriority int null */)
   insert into @Result(Location_id,PutawayBaseQuantity,IsEmpty,MaterialCount,FreedomBaseQuantity /*, SearchPriority */)          
   exec app_GetPutawayObjectList          
     @SourceObject_id = @SourceObject_id,          
     @TechnoZone_id = @TechnoZone_id,          
     @Material_id = @material_id,          
     @MaterialSeries_id = NULL,          
     @BaseQuantity = @BaseQuantity,       
     @MaterialUnit_id = @MaterialUnit_id,          
     @StockType_id = 7,          
     @StockCategory_id = 0,          
     @OwnerDebtor_id = 61330,          
     @DiscountCategory_id = NULL,          
     @OwnerBatch = NULL,          
     @ExpirationDate = '2999-12-31 00:00:00.000',
     @IsPeace = 1   


	 select  lo.LocationName as [Имя яч]
	 
	,b.NameRU as [Пар размещ]
	,@MaterialAccessGroup_id as [Шт гр об ABC  - AB]
	--,@AllocationParameter_id
	,las.NameRU as [группа скорости доступа до ячейки],
	b.tid
	,lo.PickingPriority as [Приорит обх]
	,lo.LocationZ as [Ряд]
	,tz.NameRU
	,tz.tid
	,replace(right(left(lo.LocationName ,7),3),'-','') as [обрезок]

	 ,a.*
	 from @Result a
	left  join locations lo on lo.tid=a.Location_id
  join LocationAllocationParameters b on b.tid=lo.LocationAllocationGroup_id
  join LocationAccessSpeed las on las.tid=lo.LocationAccessSpeed_id
  left join technozones tz on tz.tid=lo.TechnoZone_id
  --1-й приоритет по пар размещ
	 order by b.tid , 
	las.NameRU asc ,
	--  
	---2-й по abc
	--las.tid,

--3-й по ряду(Для M22 ASC,для M21 DESC)

case when tz.tid=207 then replace(right(left(lo.LocationName ,7),3),'-','') 
 
 end asc,
 case when tz.tid=178 then replace(right(left(lo.LocationName ,7),3),'-','') 
 
 end desc,
  case when tz.tid=208 then replace(right(left(lo.LocationName ,7),3),'-','') 
 
 end desc,
   case when tz.tid=209 then replace(right(left(lo.LocationName ,7),3),'-','') 
 end asc



 
22 июн 17, 12:38    [20583232]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Вот вывод списка ячеек. Во вложении.
Подскажите,пожалуйста,кто-нибудь. Как сделать сортировку при условии, если Шт гр об ABC - AB =12,то сначала идут ячейки с
группа скорости доступа до ячейки AB,После AA,после AC.
Сейчас у меня AA,AB,AC.

К сообщению приложен файл (Пример.xlsx - 12Kb) cкачать
22 июн 17, 12:41    [20583238]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7769
Максим Александровитч,

order by case when если Шт гр об ABC - AB =12 then 0 else 1 end
22 июн 17, 12:52    [20583280]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7769
order by 
case when если Шт гр об ABC - AB =12 
    and  ячейки с группа скорости доступа до ячейки AB then 0 
else 1 end
22 июн 17, 12:54    [20583288]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Владислав Колосов,

Да,спасибо.
А можно пож-та объяснить 0 или 1.Что значит?
Я поэтому и не использовал данный метод,т.к. не понимаю его до конца.
А так все да,работает.
Спасибо
22 июн 17, 12:59    [20583307]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7769
Максим Александровитч,

таким образов Вы проталкиваете наверх по списку требуемое условие.
условие есть - 0
прочие - 1
22 июн 17, 13:04    [20583331]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Максим Александровитч
Member

Откуда:
Сообщений: 506
Владислав Колосов,

А какое условие-то?В этом кейсе только задаваемые параметры,а двигать-то что?
Птошу прощения,ибо не так давно работаю с SQL
22 июн 17, 13:12    [20583369]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7769
Если условие выполняется, то case возвращает 0, если не выполняется 1. Затем сервер сортирует по нулям и единицам.
22 июн 17, 13:25    [20583417]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
DECLARE @Table TABLE ( val varchar(10) )
INSERT INTO @table
SELECT 'aaaa'
INSERT INTO @table
SELECT 'bbbb'
INSERT INTO @table
SELECT 'cccc'
INSERT INTO @table
SELECT 'dddd'
INSERT INTO @table
SELECT 'zzzz'


SELECT SortCol = CASE WHEN val = 'zzzz' THEN 99
                                        ELSE -42 END
,      val

	FROM @Table k
ORDER BY CASE WHEN val = 'zzzz' THEN 99
                                ELSE -42 END DESC
22 июн 17, 13:49    [20583497]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Cammomile
ORDER BY CASE WHEN val = 'zzzz' THEN 99
                                ELSE -42 END DESC

BY SortCol же
22 июн 17, 14:07    [20583558]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Ну напишите Бай СортКол и проверьте как работает. Я вас сорткол нарисовал для наглядности, чтоб вы поняли суть конструкции.
22 июн 17, 14:08    [20583569]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
автор
Ну напишите Бай СортКол и проверьте как работает.

Ну напишите БЕЗ Бай СортКол и проверьте как работает.
22 июн 17, 14:09    [20583572]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Cammomile
автор
Ну напишите Бай СортКол и проверьте как работает.

Ну напишите БЕЗ Бай СортКол и проверьте как работает.

FYI, в ORDER BY можно указывать названия конечных колонок, а не писать всю портянку CASE заново. А еще можно указывать номера выходных колонок
SELECT
  [A] = 'A',
  [B] = 'B',
  [C] = 'C'
...
ORDER BY 
  1,
  2 DESC,
  3 ASC
-- и
SELECT
  [A] = 'A',
  [B] = 'B',
  [C] = 'C'
...
ORDER BY 
  [A],
  [B] DESC,
  [C] ASC
22 июн 17, 14:41    [20583704]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
*facepalm*

Я написал отдельно столбец чтоб было видно как именно работает эта конструкция.

 А еще можно указывать номера выходных колонок 


Обычно, я ставлю таким экономным авторам "ревью не ок".
22 июн 17, 16:38    [20584148]     Ответить | Цитировать Сообщить модератору
 Re: Создание корректной сортивровки по определенному значению  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
Cammomile
*facepalm*
Я написал отдельно столбец чтоб было видно как именно работает эта конструкция.

А я таких учителей записываю с припиской "горе".
22 июн 17, 16:58    [20584220]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить