2014-01-15 33 views
0

我有一个表,名为评论SQL选择所需格式的语句

proj_id cmnt_seq_no cmnt_tx 
    20    1 20_Data1 
    20    2 20_Data2 
    20    3 20_Data3 
    20    4 20_Data4 
    20    5 20_Data5 
    20    6 20_Data6 
    20    7 20_Data7 
    21    1 21_Data1 
    21    2 21_Data2 
    21    3 21_Data3 
    21    4 21_Data4 
    21    5 21_Data5 
    21    6 21_Data6 
    21    7 21_Data7 
    22    1 22_Data1 
    22    2 22_Data2 

我想下面的输出。

PROJ_ID LastUpdatedComment 5ThComment 4thComment 3rd Comment 2ndComment 1stComment 
    22  22_Data2    -   -   -   -   - 
    21  21_Data7   21_Data6 21_Data5 21_Data4  21_Data3  21_Data2 
    20  20_Data7   20_Data6 20_Data5 20_Data4  20_Data3  20_Data2 

我在下面试过,我能够获取最新的更新评论。任何人都可以指导我取得5,4,3,2,1评论以及lastcomment ..以下是我试过的查询。

SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [Last Updated Comment] 
FROM (SELECT PROJ_ID, MAX(CMNT_SEQ_NO) AS MaxSeqNo 
FROM comment 
GROUP BY PROJ_ID) AS CMTSEQ 
JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO 

回答

0

以下是将提取所需的上述O/P的查询。

 create table #temptableforLastComment 
     (Proj_ID int, 
     [Last Updated Comment] varchar(max)) 

     create table #temptableforsecondmostComment 
     (Proj_ID int, 
     [2nd most updated comment] varchar(max)) 

     create table #temptableforthirdmostComment 
     (Proj_ID int, 
     [3rd most updated comment] varchar(max)) 

     create table #temptableforfourthmostComment 
     (Proj_ID int, 
     [4th most updated comment] varchar(max)) 

     create table #temptableforfifthmostComment 
     (Proj_ID int, 
     [5th most updated comment] varchar(max)) 

     create table #temptableforsixthmostComment 
     (Proj_ID int, 
     [6th most updated comment] varchar(max)) 

     declare @LastComment varchar(max) 
     declare @secondmostComment varchar(max) 
     declare @thirdmostComment varchar(max) 
     declare @fourthmostComment varchar(max) 
     declare @fifthmostComment varchar(max) 
     declare @sixthmostComment varchar(max) 

     Set @LastComment = 'SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [Last Updated Comment] 
     FROM (SELECT PROJ_ID, MAX(CMNT_SEQ_NO) AS MaxSeqNo 
     FROM comment 
     GROUP BY PROJ_ID) AS CMTSEQ 
     JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO' 

     Set @secondmostComment = 'SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [2nd most updated comment] 
     FROM (SELECT PROJ_ID, (MAX(CMNT_SEQ_NO)-1) AS MaxSeqNo 
     FROM comment 
     GROUP BY PROJ_ID) AS CMTSEQ 
     JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO' 

     Set @thirdmostComment = 'SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [3rd most updated comment] 
     FROM (SELECT PROJ_ID, (MAX(CMNT_SEQ_NO)-2) AS MaxSeqNo 
     FROM comment 
     GROUP BY PROJ_ID) AS CMTSEQ 
     JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO' 

     Set @fourthmostComment = 'SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [3rd most updated comment] 
     FROM (SELECT PROJ_ID, (MAX(CMNT_SEQ_NO)-3) AS MaxSeqNo 
     FROM comment 
     GROUP BY PROJ_ID) AS CMTSEQ 
     JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO' 

     Set @fifthmostComment = 'SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [3rd most updated comment] 
     FROM (SELECT PROJ_ID, (MAX(CMNT_SEQ_NO)-4) AS MaxSeqNo 
     FROM comment 
     GROUP BY PROJ_ID) AS CMTSEQ 
     JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO' 

     Set @sixthmostComment = 'SELECT CMTSEQ.PROJ_ID, CMTTXT.CMNT_TX AS [3rd most updated comment] 
     FROM (SELECT PROJ_ID, (MAX(CMNT_SEQ_NO)-5) AS MaxSeqNo 
     FROM comment 
     GROUP BY PROJ_ID) AS CMTSEQ 
     JOIN comment AS CMTTXT ON CMTSEQ.PROJ_ID = CMTTXT.PROJ_ID AND CMTSEQ.MaxSeqNo = CMTTXT.CMNT_SEQ_NO' 

     insert into #temptableforLastComment execute (@LastComment) 
     insert into #temptableforsecondmostComment execute (@secondmostComment) 
     insert into #temptableforthirdmostComment execute (@thirdmostComment) 
     insert into #temptableforfourthmostComment execute (@fourthmostComment) 
     insert into #temptableforfifthmostComment execute (@fifthmostComment) 
     insert into #temptableforsixthmostComment execute (@sixthmostComment) 

     Select lastCmt.Proj_ID, lastCmt.[Last Updated Comment], sndCmnt.[2nd most updated comment], 
     thdCmnt.[3rd most updated comment], forthCmnt.[4th most updated comment], 
     fifthCmnt.[5th most updated comment],sixthCmnt.[6th most updated comment] 
     from #temptableforLastComment lastCmt 
     left join #temptableforsecondmostComment sndCmnt on lastCmt.Proj_ID = sndCmnt.Proj_ID 
     left join #temptableforthirdmostComment thdCmnt on lastCmt.Proj_ID = thdCmnt.Proj_ID 
     left join #temptableforfourthmostComment forthCmnt on lastCmt.Proj_ID = forthCmnt.Proj_ID 
     left join #temptableforfifthmostComment fifthCmnt on lastCmt.Proj_ID = fifthCmnt.Proj_ID 
     left join #temptableforsixthmostComment sixthCmnt on lastCmt.Proj_ID = sixthCmnt.Proj_ID 


     drop table #temptableforLastComment 
     drop table #temptableforsecondmostComment 
     drop table #temptableforthirdmostComment 
     drop table #temptableforfourthmostComment 
     drop table #temptableforfifthmostComment 
     drop table #temptableforsixthmostComment