2015-08-28 2 views
0

Я использую MS SQL 2008. Мне интересно, можно ли создать запрос, который отображает результаты на основе Qty. Пожалуйста, позвольте мне объяснить, как я хочу, чтобы это выглядело.SQL-запрос - количество элементов на основе Qty

Скажем, у меня есть эта таблица и простой запрос для отображения списка записей:

Table = "Table1" 
Product = varchar(100) 
Qty = Int 

Select Product, ProductDesc, Qty FROM Table1 

Results: 
Product  ProductDesc  Qty 
ABC1  Test1   2 
ABC2  Test2   3 

Есть ли способ запроса, который основан на колонке Кол-во и перечисляя количество записей, как этот результат ниже:

**Wanted Results:** 
Product  ProductDesc  Number 
ABC1  Test1   1 
ABC1  Test1   2 
ABC2  Test2   1 
ABC2  Test2   2 
ABC2  Test2   3 

ответ

1

Использование рекурсивный запрос:

with p 
as (
    select product,productDesc, 1 as number from products 
    union all 
    select products.product,products.productDesc, p.number+1 as number from products 
     inner join p on products.product = p.product 
     where number<qty 
    ) 
select * from p order by product 

Упрощенный пример: fiddle

+0

Спасибо! когда я попытался щелкнуть образец скрипта ссылки, я получил эту ошибку: Проблема с доступом /sqlfiddle/sqlfiddle/index.html. Причина: не найден. Любая идея почему? – Milacay

+0

Но я обращаюсь к нему нормально –

+0

Возможно, у моего ПК есть проблемы. Спасибо! – Milacay

1

Не уверен, что это правильный путь, но он должен работать

with cte as 
(
select 1 as num 
union all 
select num+1 from cte where num < 1000 -- max qty from your table 
), comb as 
(
select Product,ProductDesc,num from 
(select distinct Product,ProductDesc from Table1) t cross join cte c 
) 
select * from Table1 t 
inner join comb c on t.Product = c.Product 
and t.ProductDesc = c.ProductDesc 
and c.qty <= t.num 

Для simplicit y я использовал Recursive CTE для генерации числа, но это может быть проблемой с производительностью. Проверьте here для разных методов генерации числа без цикла.

Смежные вопросы