2017-04-24 7 views
1

私は、ショーのエピソードのために1つの行を格納するテーブルを持っています。すべてのエピソードが格納されるわけではないことに注意してください。SQL:プレースホルダ行のピボット

showID | viewerID | episodeNumber | episodeDescription 
____________________________________________________________________ 
15  | ID-123  |  1    | Scary 
____________________________________________________________________ 
15  | ID-123  |  3    | Funny 

エピソード番号と説明の列を作成するためのピボットクエリを作成しました。エピソードの数は既知の量です。

showID | viewerID | episode1 | episode2 | episode3 
__________________________________________________________________________ 
15   | ID-123  | Scary  |  funny  |  

私の問題は、最初のテーブルのエピソード番号2の行の欠如によって、この例のように、エピソードのための記録がない場合、クエリは、「プレースホルダ」を作成しないことで、代わりにepisode3のデータをepisode2の列に入れます。私は必要なものがあれば分かりませんが、エピソード番号のデータがないときは、エピソード番号が正しい記述に関連付けられていることを確認する必要があります。表2の各エピソードの列を表示します(上の表2では、episode2のフィールドは空白にしてください)。

私のクエリは次のとおりです。

SELECT viewerID, showID, 
episodeDescription1, episodeDescription2, episodeDescription3 
FROM 
(
    SELECT viewerID, showID, col+cast(seq as varchar(10)) as col, value 
    from 
    (
    SELECT viewerID, showID, episodeNumber, episodeDescription, 
      row_number() over(partition by showID 
         order by episodeNumber) seq 
    FROM tbl_showEpisodes 
) d 
    CROSS APPLY 
    (
    SELECT 'episodeNumber', cast(episodeNumber as varchar(20)) 
    UNION ALL 
    SELECT 'episodeDescription', episodeDescription 
) c (col, value) 
) src 
pivot 
(
    MAX(value) 
    for col in (
    episodeNumber1, episodeDescription1, episodeNumber2, 
    episodeDescription2, episodeNumber3, episodeDescription3) 
) piv; 

私はこれが明確で、かつ任意の助けを事前に感謝願っています! SQL Serverを使用して、2012年

答えて

2

あなたはこの方法でそれを旋回することができる。

create table tbl_showEpisodes (showID int, viewerID varchar(30), episodeNumber int, episodeDescription varchar(30)); 
insert into tbl_showEpisodes values 
(15, 'ID-123', 1, 'Scary'), 
(15, 'ID-123', 3, 'Funny'); 
GO 
SELECT showID, viewerID, [Episode 1], [Episode 2], [Episode 3] 
FROM (SELECT showID, 
      viewerID, 
      CONCAT('Episode ', episodeNumber) epNumber, 
      episodeDescription 
     FROM tbl_showEpisodes) src 
PIVOT (MAX(episodeDescription) 
     FOR epNumber 
     IN ([Episode 1],[Episode 2],[Episode 3])) pvt 
GO 
 
showID | viewerID | Episode 1 | Episode 2 | Episode 3 
-----: | :------- | :-------- | :-------- | :-------- 
    15 | ID-123 | Scary  | null  | Funny  

dbfiddle here

+0

BAM、それはトリックでした。あなたは私の一日を作った。どうもありがとうございます!!! – Brig