Може би пропускам нещо, но трябва да можете да PIVOT данните, но ще трябва да внедрите row_number()
за да помогнете за генерирането на колоните.
Ключът ще бъде да използвате заявка, подобна на:
SELECT ONE.UserID, ONE.Episode, ONE.Value, TWO.Details, 'Details' +cast(row_number() over(partition by one.userid, one.episode order by two.details) като varchar(10)) seqFROM TABLE1 ONE INNER JOIN TABLE2 Two ON ONE.UserID =TWO.UserID AND ONE.Episode =TWO.Episode
Това ще създаде уникална последователност за новите имена на колони, след което можете да приложите PIVOT:
изберете userid, episode, value, details1, details2from( SELECT ONE.UserID, ONE.Episode, ONE.Value, TWO.Details, 'Details' +cast(row_number() over(partition by one.userid , ред на един.епизод по two.details) като varchar(10)) seq FROM TABLE1 ONE INNER JOIN TABLE2 Two ON ONE.UserID =TWO.UserID AND ONE.Episode =TWO.Episode) dpivot( max(details) for seq in (Детайли1, Детайли2)) piv;
Вижте SQL Fiddle с демонстрация . След това можете да конвертирате това в динамичен SQL:
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)select @cols =STUFF((SELECT ',' + QUOTENAME('Details'+cast(seq as varchar(10))) from ( select row_number() over(partition by one.userid, one.episode order by two.details) seq FROM TABLE1 ONE INNER JOIN TABLE2 Two ON ONE.UserID =TWO.UserID AND ONE.Episode =TWO.Episode ) d група по seq ред по seq FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'')set @query ='SELECT userid, episode, value, ' + @cols + ' from ( SELECT ONE.UserID, ONE.Episode, ONE.Value, TWO.Details, ''Details'' +cast (row_number() over(partition by one.userid, one.episode order by two.details) as varchar(10)) seq FROM TABLE1 ONE INNER JOIN TABLE2 Two ON ONE.UserID =TWO.UserID AND ONE.Episode =TWO. Episode ) x pivot ( max(details) for seq in (' + @cols + ') ) p 'execute sp_executesql @query;
Вижте SQL Fiddle с демонстрация . Давам ви резултата:
<предварителен код>| USERID | ЕПИЗОД | СТОЙНОСТ | ПОДРОБНОСТИ1 | ПОДРОБНОСТИ2 ||--------|---------|-----------|-----------|---- -------|| 1 | 1 | СТОЙНОСТ 1-1 | Подробности 1 | Детайли 2 || 1 | 2 | СТОЙНОСТ 1-2 | Подробности 1 | Подробности 2 |