Sql server 2008 SQL选择所需格式的语句
我有一个名为comment的表Sql server 2008 SQL选择所需格式的语句,sql-server-2008,Sql Server 2008,我有一个名为comment的表 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
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条评论以及最后一条评论。。下面是我尝试过的问题
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
下面是将获取上述所需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