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

Откуда:
Сообщений: 39
Есть таблица с заказами 80.000 строк
вопрос как мне получить min( indificator ) max( indificator ) привязав zakaz. помогите плз.

zakaz indificator
123456 1
123456 2
123456 3
123457 1
123457 2
123458 1
123458 2
123458 3
На выходе
zakaz indificator
123456 1
123456 3
123457 1
123457 2
123458 1
123458 3
10 ноя 16, 17:23    [19880275]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
terra_1231,

UNION ?
10 ноя 16, 17:26    [19880288]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
можно и более извращённо, но смысла не вижу :)
10 ноя 16, 17:32    [19880305]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
terra_1231
Member

Откуда:
Сообщений: 39
TaPaK,

UNION не получается пробывал
10 ноя 16, 17:37    [19880320]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
хотя более извращённый выгоднее, вообщем то понятно почему :)
выбирай
SET STATISTICS IO ON
--Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SELECT
	b.Code, 
	a.Code,
	CASE 
		WHEN b.Code = 'MIN'
		THEN MIN(Id)
		WHEN b.Code = 'MAX'
		THEN MAX(Id)
	END
FROM Table a
CROSS JOIN
(
	SELECT Code FROM (Values ('MIN'),('MAX')) x(Code)

) b
GROUP BY 
	a.Code,b.Code

-- Scan count 2, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SELECT 
	'MIN' as [Type],
	a.Code,
	MIN(ID) as Val
FROM Table a
GROUP BY 
	a.Code
UNION ALL
SELECT 
	'MAX' as [Type],
	a.Code,
	MAX(ID) as Val
FROM Table a
GROUP BY 
	a.Code
ORDER BY 
	Code,[Type]
SET STATISTICS IO OFF
10 ноя 16, 17:46    [19880366]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
terra_1231
Member

Откуда:
Сообщений: 39
TaPaK,

проще ни как ?))
10 ноя 16, 17:48    [19880374]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
terra_1231,

что значить проще?
10 ноя 16, 17:50    [19880385]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
terra_1231
Member

Откуда:
Сообщений: 39
TaPaK,
под запросом
10 ноя 16, 17:54    [19880403]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
komrad
Member

Откуда:
Сообщений: 5260
terra_1231
TaPaK,

проще ни как ?))


так ?

;with Z (zakaz,ind) as (
	select 123456,1 union all
	select 123456,2 union all
	select 123456,3 union all
	select 123457,1 union all
	select 123457,2 union all
	select 123458,1 union all
	select 123458,2 union all
	select 123458,3)
select zakaz,min(ind)
   from Z
group by zakaz
union all
select zakaz,max(ind)
   from Z
group by zakaz
order by 1,2
10 ноя 16, 17:55    [19880410]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
komrad,

а я как написал? :)

автор
под запросом

под чем? для чего?
10 ноя 16, 17:57    [19880418]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
o-o
Guest
terra_1231
TaPaK,
под запросом

в жизни всяко бывает: одни под столом, другие под запросом
10 ноя 16, 18:06    [19880442]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
declare @t table(zakaz int,id int)

insert @t
values(123456, 1),
(123456,2),
(123456,3),
(123457,1),
(123457,2),
(123458,1),
(123458,2),
(123458,3) 



select* from(
select top 1 with ties * from @t
order by row_number() over(partition by zakaz order by id)
union
select top 1 with ties * from @t
order by row_number() over(partition by zakaz order by id desc)
) c
10 ноя 16, 19:04    [19880589]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Massa52
Member

Откуда:
Сообщений: 380
declare @t table(zakaz int,id int)

insert @t
values(123456, 1),(123456,2),(123456,3),(123457,1),(123457,2),(123458,1),(123458,2),(123458,3) 

;WITH c AS 
(SELECT zakaz, MIN(id) n, MAX(id) x  
FROM @t 
GROUP BY zakaz
)
SELECT t.* FROM @t t INNER JOIN c ON t.zakaz = c.zakaz
WHERE id = n Or id = x 
11 ноя 16, 03:30    [19881482]     Ответить | Цитировать Сообщить модератору
 Re: Нужна помощь  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 113
А ещё так можно:

declare @t table (zakaz int,id int)

insert @t values(123456, 1), (123456,2), (123456,3), (123457,1), (123457,2), (123458,1), (123458,2), (123458,3)

SELECT zakaz
      ,unpvt.id
  FROM (SELECT zakaz
              ,MIN(id) n
              ,MAX(id) x
          FROM @t
         GROUP BY zakaz) T
       UNPIVOT (id FOR i IN (n, x)) unpvt;
11 ноя 16, 11:25    [19882124]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить