1

テーブル「タイトル」が1つあるとすると、このテーブルには4つの列があります。

Bookid, Isbn, TitleName, Description.

1         123  english     this is a english buk.

2        123  english      Its author is "Mr xyz"

これで、同じ本の説明のb'cozが2回表示されることがわかります。

では、どうすれば以下の出力を得ることができますか。

Bookid, Isbn,         TitleName,           Description1,                  Description2

1         123         english              "this is a english buk"         "Its author is Mr xyz"
4

4 に答える 4

1

BookIdサブクエリを使用して、本ごとの最小値と最大値を計算できます。次に、2つの説明を結合できます。

select  min(BookId)
,       Isdn
,       TitleName
,       max(case when rn = 1 then Description end) as Descr1
,       max(case when rn = 2 then Description end) as Descr2
,       max(case when rn = 3 then Description end) as Descr3
from    (
        select  row_number() over (partition by Isdn, TitleName order by BookId) as rn
        ,       BookId
        ,       Isdn
        ,       TitleName
        ,       Description 
        from    Title
        ) as ids
group by
        Isdn
,       TitleName
于 2012-08-20T05:40:14.953 に答える
0

これを試して

 select * 
 from
 (
      select 
           *,
           row_number() over (partition by bookid, isbn, titlename order by description) rn
      from yourtable
 ) src
 pivot
 ( max(description) for rn in ([1],[2],[3])) p
于 2012-08-20T11:34:30.587 に答える
0

@bluefeet、クエリを修正して、10 個を超える説明 (並べ替え) を許可しました...

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((select c from (SELECT  ',' + QUOTENAME('Description'+cast(row_number() over (partition by bookid, isbn, titlename order by bookid) as varchar(11))) AS C
                    from title) TBL group by c order by CAST(Replace(REPLACE(C,',[Description',''),']','') as int)
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query 
      = 'SELECT bookid, isbn, titlename,' + @cols + ' from 
         (
            select bookid, isbn, titlename, description,
              ''Description''+ cast(row_number() over (partition by bookid, isbn, titlename order by bookid) as varchar(10)) rn
            from title
         ) x
         pivot 
         (
            min(description)
            for rn in(' + @cols + ')
         ) p '

execute(@query)
于 2013-11-26T18:04:28.730 に答える