Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Операция обратная группировке  [new]
впрос
Guest
Необходимо получить кол-во записей разных article, равное целому числу quantity из таблицы.
Как это эффективнее всего сделать с точки зрения производительности?


Пример:
declare @t table(article int, quantity decimal(19,3))

insert into @t(article, quantity)
select 1, 4
union all
select 1, 2.3
union all
select 2, 2



Надо максимально быстро получить из этого:
article quantity
1 1
1 1
1 1
1 1
1 1
1 1
2 1
2 1
12 мар 15, 14:48    [17375593]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
declare @t table(article int, quantity decimal(19,3))

insert into @t(article, quantity)
select 1, 4
union all
select 1, 2.3
union all
select 2, 2

SELECT T.article,quantity=1
FROM (SELECT article, FLOOR(SUM(quantity)) FROM @t GROUP BY article)T(article,quantity)
JOIN master.dbo.spt_values V ON V.type='P' AND V.number<T.quantity;


Таблицу с числами свою сделайте.
12 мар 15, 14:59    [17375672]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
o-o
Guest
declare @t table(article int, quantity decimal(19,3));

insert into @t(article, quantity)
select 1, 4
union all
select 1, 2.3
union all
select 2, 2;

with nums as
(
select number as n
from master..spt_values 
where type = 'p'
)

select t.article, n.quantity
from @t t cross apply (select top(cast(t.quantity as int)) 1 as quantity from nums )n
12 мар 15, 15:01    [17375684]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
Glory
Member

Откуда:
Сообщений: 104760
впрос
Необходимо получить кол-во записей разных article, равное целому числу quantity из таблицы.

А если в quantity будет миллион ? И самих записей бедт миллион ?
12 мар 15, 15:01    [17375686]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
o-o
Guest
Glory
впрос
Необходимо получить кол-во записей разных article, равное целому числу quantity из таблицы.

А если в quantity будет миллион ? И самих записей бедт миллион ?

а тогда
iap
Таблицу с числами свою сделайте.

и чтоб в ней минимум миллион записей был
12 мар 15, 15:04    [17375700]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
впрос
Guest
Glory
впрос
Необходимо получить кол-во записей разных article, равное целому числу quantity из таблицы.

А если в quantity будет миллион ? И самих записей бедт миллион ?


Тогда записей будет миллион, к сожалению, да.

o-o, iap, спасибо.
12 мар 15, 15:05    [17375708]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
впрос
Необходимо получить кол-во записей разных article, равное целому числу quantity из таблицы.

А если в quantity будет миллион ? И самих записей бедт миллион ?


Тогда придётся воспользоватся моим кодом.

WITH N100 AS 
( -- цифры от 0 до 99
	SELECT 0 AS N
	UNION ALL 
	SELECT N100.N + 1 FROM N100
	WHERE N100.N < 99
), -- цифры от 0 до 9999
N1000000 AS 
(
	SELECT N = (N1.N * 100 + N2.N) * 100 + N3.N FROM N100 N1, N100 N2, N100 N3
)
SELECT N FROM N1000000
ORDER BY N


Ибо он медленный, но если результат этого запроса загнать в InMemory таблицу, то скорость будет выше крыши всех крыш.
12 мар 15, 15:10    [17375739]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
Glory
Member

Откуда:
Сообщений: 104760
впрос
Тогда записей будет миллион, к сожалению, да.

1 млн * 1 млн - это больше 1 млн. Гораздо больше.
12 мар 15, 15:10    [17375742]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
впрос
Тогда записей будет миллион, к сожалению, да.

1 млн * 1 млн - это больше 1 млн. Гораздо больше.


Тогда придётся на BIGINT перейти. А что есть 1 млн * 1 млн * 1 млн ? Тогда как?
12 мар 15, 15:15    [17375771]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
впрос
Guest
Glory
впрос
Тогда записей будет миллион, к сожалению, да.

1 млн * 1 млн - это больше 1 млн. Гораздо больше.


вы к чему ведете?
12 мар 15, 15:16    [17375785]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
Glory
Member

Откуда:
Сообщений: 104760
впрос
Glory
пропущено...

1 млн * 1 млн - это больше 1 млн. Гораздо больше.


вы к чему ведете?

К тому, что полученный результат либо будет неверным, либо неподъемным
12 мар 15, 15:17    [17375793]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
впрос
пропущено...


вы к чему ведете?

К тому, что полученный результат либо будет неверным, либо неподъемным


А именно, что столь любимой завсегдатаеми данного форума табличке, всего 2048 чисел.

select number as n
from master..spt_values 
where type = 'p'
12 мар 15, 15:22    [17375851]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
впрос
Guest
Glory
впрос
пропущено...


вы к чему ведете?

К тому, что полученный результат либо будет неверным, либо неподъемным


Почему неверным?
неподъемным - да, согласен. С этим будут мириться.
Что касается миллиона записей, то скорее всего будет какое-то вменяемое ограничение кол-ва.
12 мар 15, 15:22    [17375852]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
o-o
Glory
пропущено...

А если в quantity будет миллион ? И самих записей бедт миллион ?

а тогда
iap
Таблицу с числами свою сделайте.

и чтоб в ней минимум миллион записей был
Вот, кстати, на работе я везде именно такие таблицы понасоздавал.
Теперь задумываюсь о миллиарде!
12 мар 15, 15:23    [17375863]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
Glory
Member

Откуда:
Сообщений: 104760
впрос
Почему неверным?

Потому что, что если в вашей таблице целых чисел будет меньше чисел, чем маскимально значение в quantity, то и в результаете запроса число записей будет меньше требуемого
12 мар 15, 15:24    [17375875]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
но если результат этого запроса загнать в InMemory таблицу, то скорость будет выше крыши всех крыш.

А если скомбинировать это с вашим представлением-календарем, то круче этого в мире ничего не будет.
12 мар 15, 15:26    [17375896]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
0-0
Guest
iap
Теперь задумываюсь о миллиарде!


Место они занимают много
12 мар 15, 15:29    [17375926]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
впрос
Guest
a_voronin
Ибо он медленный, но если результат этого запроса загнать в InMemory таблицу, то скорость будет выше крыши всех крыш.


Тут то как раз скорее код для приложения, а не для сервера. Но, к сожалению, делать надо именно на сервере.
12 мар 15, 15:31    [17375950]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
o-o
Guest
0-0
iap
Теперь задумываюсь о миллиарде!

Место они занимают много

это что за кривая пародия на меня, уж не агитируете ли сложить все в in-memory?
а, не, лучше на ходу рекурсивное cte посчитать.
вы не стесняйтесь, пишите в явном виде, к чему вы клоните,
даже если узнаю, кто это тут изображает расплющенное о-о, бить не буду
12 мар 15, 15:36    [17375986]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
o-o
Guest
какие страшные цифры мы видим на картинке, тут еще и не так расплющит

К сообщению приложен файл. Размер - 34Kb
12 мар 15, 15:39    [17376006]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
но если результат этого запроса загнать в InMemory таблицу, то скорость будет выше крыши всех крыш.

А если скомбинировать это с вашим представлением-календарем, то круче этого в мире ничего не будет.


А вот я бы запрос с использованием master..spt_values в боевой код никогда бы не вставил. Ибо это системная недокументированная таблица. И что с ней может произойти в следующих версиях SQL одному Биллу Гейтсу Сатье Наделле неизвестно.

https://social.msdn.microsoft.com/forums/sqlserver/en-US/a7cc9252-a1d1-4f51-9c35-7cd9720b507c/what-is-the-use-of-table-masterdbosptvalues.

И помимо скорости запросов, есть ещё другие факторы, такие как надёжность и понятность кода.
12 мар 15, 15:40    [17376024]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
впрос
a_voronin
Ибо он медленный, но если результат этого запроса загнать в InMemory таблицу, то скорость будет выше крыши всех крыш.


Тут то как раз скорее код для приложения, а не для сервера. Но, к сожалению, делать надо именно на сервере.


Сгенерите таблицу с цифрами и не парьтесь. Про кластерный индекс не забудьте.
12 мар 15, 15:43    [17376045]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
o-o
Guest
a_voronin
А вот я бы запрос с использованием master..spt_values в боевой код никогда бы не вставил

господи, a_voronin,
ну неужели не доходит, что у нас у всех давно есть таблица чисел?
просто в отличие от некоторых,
мы тут птиводим код, к-ый копируешь как есть, запускаешь, и сервер не спрашивает, что еще за dbo.Nums.
12 мар 15, 15:45    [17376060]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
А вот я бы запрос с использованием master..spt_values в боевой код никогда бы не вставил.

Вы вообще особенный. У вас свои особенные критерии быстродействия и надежности.
12 мар 15, 15:46    [17376068]     Ответить | Цитировать Сообщить модератору
 Re: Операция обратная группировке  [new]
0-0
Guest
o-o
какие страшные цифры мы видим на картинке, тут еще и не так расплющит


Так речь то о миллиарде и больше.
12 мар 15, 15:51    [17376110]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить