Развернуть результаты строки на основе значения в столбце (с помощью итератора) - PullRequest
4 голосов
/ 09 августа 2011

Нужна помощь от вас всех в написании этого запроса. Запуск SQL 2005 Standard Edition.

У меня есть базовый запрос, который получает подмножество записей из таблицы, где record_Count больше 1.

SELECT * 
    FROM Table_Records
    WHERE Record_Count > 1

Этот запрос дает мне набор результатов, скажем:

TableRecords_ID       Record_Desc               Record_Count
123                   XYZ                       3
456                   PQR                       2

Приведенный выше запрос необходимо изменить так, чтобы каждая запись появлялась столько же раз, сколько Record_Count и имела свой номер итерации вместе с ней в качестве значения. Таким образом, новый запрос должен возвращать результаты следующим образом:

   TableRecords_ID   Record_Desc          Record_Count            Rec_Iteration
   123                XYZ                      3                        1
   123                XYZ                      3                        2
   123                XYZ                      3                        3
    456                PQR                       2                        1
    456                PQR                       2                        2

Может ли кто-нибудь помочь нам написать этот запрос? ценим помощь.

Уточнение: столбец Rec_Iteration является вложенным представлением Record_Count. По сути, поскольку для описания XYZ существует три параметра Record_Count, таким образом, были возвращены три строки с Rec_Iteration, представляющим одну, две и три строки соответственно.

1 Ответ

2 голосов
/ 09 августа 2011

Вы можете использовать рекурсивный CTE для этого запроса.Ниже я использую табличную переменную @T вместо вашей таблицы Table_Records.

declare @T table(TableRecords_ID int,Record_Desc varchar(3), Record_Count int)

insert into @T
select 123, 'XYZ', 3 union all
select 456, 'PQR', 2

;with cte as
(
  select TableRecords_ID,
         Record_Desc,
         Record_Count,
         1 as Rec_Iteration
  from @T
  where Record_Count > 1
  union all  
  select TableRecords_ID,
         Record_Desc,
         Record_Count,
         Rec_Iteration + 1
  from cte 
  where Rec_Iteration < Record_Count
)
select TableRecords_ID,
       Record_Desc,
       Record_Count,
       Rec_Iteration
from cte
order by TableRecords_ID,
         Rec_Iteration
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...