2

残高の行を格納するテーブルがある場合

    Code     cat  balance
    ----------------------
    Sales    101  123
    Cost     101   45
    Overhead 101   67
    Sales    102  890
    Costs    102   12
    Overhead 102   34

(など、「猫」は製品カテゴリであり、さらに多くのカテゴリがあり、「コード」は総勘定元帳コードを表すと仮定します)

出力が表示されるようにコーディングするにはどうすればよいですか....

Code   101   102   [103..etc ->]
-----------------------------------    
Sales  123   890   [#]
Costs   45    12   [#]
Overhead...

これはおそらく非常に単純ですが、これを行う方法が見つかりません。助けていただければ幸いです。

ダレン

4

3 に答える 3

3

残念ながら、SQL Server 2000 にはPIVOT機能がありませんが、動的 SQL を使用して複製できます。

DECLARE @query  AS NVARCHAR(MAX),  -- VARCHAR(8000)  in SQL Server 2000 or text
  @rowCount as int,
  @pivotCount as int,
  @pivotRow as varchar(10) = ''

select distinct cat
into #colsPivot
from yourtable

set @pivotCount= (select COUNT(*) from #colsPivot) 
set @rowCount = 1
set @query = ''

---- create the CASE string
while @rowCount <= @pivotCount
    begin
        set @pivotRow = (select Top 1 cat from #colsPivot)

        set @query = @query + ', sum(case when cat = ' + @pivotRow + ' then balance end) as ''' + @pivotRow + ''''

        delete from #colsPivot where cat = @pivotRow

        if @rowCount <= @pivotCount
            begin
                set @rowCount = @rowCount + 1
                print @rowCount
            end
    end

-- add the rest of the SQL Statement
set @query = 'SELECT code ' + @query + ' from yourtable group by code'

exec(@query)

drop table #colsPivot

デモで SQL Fiddleを参照してください

于 2012-09-21T13:18:04.147 に答える
1
select 
    Code,
    sum(case cat when 101 then balance else 0) as '101',
    sum(case cat when 102 then balance else 0) as '102'
from balances
group by Code
于 2012-09-21T13:07:13.537 に答える
0

SQLサーバーのPIVOT関数を使ってみる

于 2012-09-21T09:11:28.557 に答える