SQL Server - разбить строку на несколько строк - PullRequest
0 голосов
/ 01 июня 2018

У меня есть таблица SQL Server 2008 R2, которая представляет строки заказов.Это выглядит так (упрощенная версия):

LineId ProductId Quantity MaxQuantityInPackage
1      ProductA  160      160
2      ProductB  20       50
3      ProductC  220      100

Вот результат, который мне нужен:

LineId ProductId Quantity MaxQuantityInPackage
1      ProductA  160      160
2      ProductB  20       50
3      ProductC  220      100
3      ProductC  220      100
3      ProductC  220      100

Как видите, мне нужна строка за пакетом для каждой линейки продуктов.ProductC нужно 3 пакета, поэтому его нужно разбить на 3 строки.

Я нашел там несколько подсказок, основанных на временных таблицах или сценарии T-SQL.

Но в моем случае яиспользуйте этот запрос в программном обеспечении для создания отчетов (счетов).Это программное обеспечение не позволяет мне использовать сложные функции, и мне повезло, что у меня все еще есть доступ к функции UNION.

Как мне добиться этого самым простым способом?

Спасибо за вашеответы.JiceY.

1 Ответ

0 голосов
/ 01 июня 2018

Самый простой способ - создать таблицу чисел с целыми числами от 1 до наибольшего необходимого вам числа.

Тогда вы можете использовать

SELECT oi.*
FROM   OrderItems oi
       JOIN Numbers n
         ON n.Number <= CEILING(1.0 * Quantity / MaxQuantityInPackage) 

Если вы не можете создавать таблицыВы можете включить производный один встроенный.

SELECT oi.*
FROM   OrderItems oi
       JOIN (SELECT 1
             UNION ALL
             SELECT 2
             UNION ALL
             SELECT 3
             UNION ALL
             SELECT 4
             UNION ALL
             SELECT 5
             UNION ALL
             SELECT 6
             UNION ALL
             SELECT 7
             UNION ALL
             SELECT 8
             UNION ALL
             SELECT 9
             UNION ALL
             SELECT 10) n(Number)
         ON n.Number <= CEILING(1.0 * Quantity / MaxQuantityInPackage) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...