Возвращает несколько результатов в зависимости от поля количества

#sql-server #sql-server-2005 #resultset

#sql-server #sql-server-2005 #набор результатов

Вопрос:

У меня есть следующая таблица записей:

 Product     |    Colour  |   Quantity
---------------------------------------
Product A   |    Blue    |          1
Product A   |    Red     |          2
Product B   |    Green   |          1
  

Как я могу написать запрос, чтобы вернуть следующее?:

 Product     |    Colour
---------------------------
Product A   |    Blue
Product A   |    Red
Product A   |    Red
Product B   |    Green
  

Ответ №1:

 WITH    numbers (rn) AS
        (
        SELECT  MAX(quantity)
        FROM    product
        UNION ALL
        SELECT  rn - 1
        FROM    numbers
        WHERE   rn > 1
        )
SELECT  p.*
FROM    product p
JOIN    numbers n
ON      p.quantity >= n.rn
  

Комментарии:

1. Мне кажется, что это возвращает обратное. 2 результата, где количество равно 1, и 1 результат, где количество равно 2. Есть идеи?

2. @Curt: конечно, просто измените знак в ON предложении. Смотрите обновление post.

3. Это великолепно. Мне потребовалось некоторое время, чтобы разобраться, как именно это работает, но теперь я знаю, думаю, это отличное решение. Приветствия.