0

私はSQLにテーブルを持っています

ユーザー | アカウント
--+---------
  1 | 25
  1 | 31
  1 | 35
  1 | 44
  1 | 50
  1 | 59

そして必要性を3つの列として出力します

  1 | 25 | 31
  1 | 35 | 44
  1 | 50 | 59
4

1 に答える 1

1

わかりましたので、SQL Server 2005 と言ったように、rownumber を使用した実装を示します。

前提: 1.) 基本グループは Id である必要があります。ID 1 と ID 2 のアカウントを同じ行に配置しないでください。

モックデータを使用したソリューション:

SELECT  ID,
        Max(Case When OrderCaluse = 0 Then Account Else NULL END) AS Account1,
        Max(Case When OrderCaluse = 1 Then Account Else NULL END) AS Account2
FROM
( 
    Select  ID,
            Account,
            (RowNum+1)/2 As GroupClause, 
            (RowNum+1)%2 as OrderCaluse
    FROM
    (
        Select  *,
                ROW_NUMBER() Over (Partition by Id order by account) As RowNum
        FRom
        (
            Select 1 as Id, 25 as Account
            Union ALL
            Select 1, 31
            Union ALL
            Select 1, 35
            Union ALL
            Select 1, 44
            Union ALL
            Select 1, 50
            Union ALL
            Select 1, 59
        ) AS UserAccount
    ) AS T
) AS T1
Group By Id,GroupClause

結果:

1   25  31
1   35  44
1   50  59

それが役に立てば幸い。使用するには、内部一時テーブルの UserAccount を削除して、物理テーブルを使用してください。

于 2010-04-23T06:40:53.127 に答える