Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
04.03.2022, 08:53
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
Добрый день, есть строка с данными: StockID ArticleID Items_sum Price TranDate TranCode market_id 16327743 61000143506 5.000000 8030 13.01.2015 11:18 IN 504 Как мне привести к виду: StockID ArticleID Items_sum Price TranDate TranCode market_id 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 То есть разбить сумму пять на 5 строк по 1? Допускаю что это может что-то похожее на CROSS JOIN, но не получается ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 09:33
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
gerzzog, самое простое while Price > 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 09:36
|
|||
---|---|---|---|
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
gerzzog Добрый день, есть строка с данными: StockID ArticleID Items_sum Price TranDate TranCode market_id 16327743 61000143506 5.000000 8030 13.01.2015 11:18 IN 504 Как мне привести к виду: StockID ArticleID Items_sum Price TranDate TranCode market_id 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 16327743 61000143506 1.000000 8030 13.01.2015 11:18 IN 504 То есть разбить сумму пять на 5 строк по 1? Допускаю что это может что-то похожее на CROSS JOIN, но не получается джойните с таблицей чисел от 1 до .....Х по условию items_sum<X(i) и усё или cross apply в котором возвращаете результат от 1 до Items_sum ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 11:17
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
Спасибо! Буду пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 17:01
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 17:15
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
uaggster Код: sql 1. 2. 3. 4.
можете, пожалуйста, объяснить код? Как он работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 17:21
|
|||
---|---|---|---|
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
gerzzog uaggster Код: sql 1. 2. 3. 4.
можете, пожалуйста, объяснить код? Как он работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 17:29
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
felix_ff gerzzog пропущено... можете, пожалуйста, объяснить код? Как он работает? а если сумма в строке будет не пять, а десять, а в следующей строке 15? как автоматически прописать, чтобы разбивало на 10,15 строк по 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 17:53
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
gerzzog а если сумма в строке будет не пять, а десять, а в следующей строке 15? как автоматически прописать, чтобы разбивало на 10,15 строк по 1? Ну мне просто лень было описывать исходную таблицу, с полем N, которое в одной строке 10, а в другой - 15 (это по хорошему вы должны были сделать, см. закрепленный топик по правилу оформления тем, на главной странице), и я заменил создание такой таблицы - примера просто выражением Select * from (Values (3), (5), (2), (1)) t(n) Это для понимания сути происходящего - не важно. Содержательные строки тут: Cross apply (Values(Replicate(',', t.n - 1 ))) tt(m) Cross apply string_split(tt.m, ',') ttt Собственно, привешиваете это к Select * from ваша_таблица t -- ( а поле n в ней, соответственно, это ваше поле с суммой), и получаете профит. С т.з. производительности - говно, конечно. MSSQLSERVER очень не хватает постгрессовских генераторов, но, на скорую руку - почему б и нет? Сердито и не дорого. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 18:00
|
|||
---|---|---|---|
|
|||
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
uaggster gerzzog а если сумма в строке будет не пять, а десять, а в следующей строке 15? как автоматически прописать, чтобы разбивало на 10,15 строк по 1? Ну мне просто лень было описывать исходную таблицу, с полем N, которое в одной строке 10, а в другой - 15 (это по хорошему вы должны были сделать, см. закрепленный топик по правилу оформления тем, на главной странице), и я заменил создание такой таблицы - примера просто выражением Select * from (Values (3), (5), (2), (1)) t(n) Это для понимания сути происходящего - не важно. Содержательные строки тут: Cross apply (Values(Replicate(',', t.n - 1 ))) tt(m) Cross apply string_split(tt.m, ',') ttt Собственно, привешиваете это к Select * from ваша_таблица t -- ( а поле n в ней, соответственно, это ваше поле с суммой), и получаете профит. С т.з. производительности - говно, конечно. MSSQLSERVER очень не хватает постгрессовских генераторов, но, на скорую руку - почему б и нет? Сердито и не дорого. понял, спасибо. у меня таблица 10 млн строк, надеюсь съест) ... |
|||
:
Нравится:
Не нравится:
|
|||
|
04.03.2022, 18:27
|
|||
---|---|---|---|
Разбить сумму в строке на много строк с значением 1 |
|||
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Не проверял! ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
Start [/forum/topic.php?fid=46&mobile=1&tid=1683783]: |
0ms |
get settings: |
25ms |
get forum list: |
10ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
47ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
696ms |
get tp. blocked users: |
1ms |
others: | 201ms |
total: | 1009ms |
0 / 0 |