|
Разбить сумму в строке на много строк с значением 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, 08:53 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
gerzzog, самое простое while Price > 0 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 09:33 |
|
Разбить сумму в строке на много строк с значением 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, 09:36 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
Спасибо! Буду пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 11:17 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 17:01 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
uaggster Код: sql 1. 2. 3. 4.
можете, пожалуйста, объяснить код? Как он работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 17:15 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
gerzzog uaggster Код: sql 1. 2. 3. 4.
можете, пожалуйста, объяснить код? Как он работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 17:21 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
felix_ff gerzzog пропущено... можете, пожалуйста, объяснить код? Как он работает? а если сумма в строке будет не пять, а десять, а в следующей строке 15? как автоматически прописать, чтобы разбивало на 10,15 строк по 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 17:29 |
|
Разбить сумму в строке на много строк с значением 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, 17:53 |
|
Разбить сумму в строке на много строк с значением 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:00 |
|
Разбить сумму в строке на много строк с значением 1
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Не проверял! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 18:27 |
|
|
Start [/forum/topic.php?fid=46&msg=40137499&tid=1683783]: |
0ms |
get settings: |
29ms |
get forum list: |
11ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
69ms |
get topic data: |
21ms |
get forum data: |
6ms |
get page messages: |
574ms |
get tp. blocked users: |
3ms |
others: | 148ms |
total: | 877ms |
0 / 0 |