2012-09-21 2 views
2

나는 균형 SQL 서버 목록

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... 

이 아마 매우 간단합니다 .... 출력 쇼 있도록 코딩 얼마나하지만 난이 일을하는 방법을 찾을 수 없습니다 및 어떤 도움이 될 것 GR eatly 고맙다.

대런

답변

0

+0

아를 참조하십시오 - 난 그냥 '피봇'에 읽을 - 불행하게도, 내가 그에서 – dazzathedrummer

+0

:-('피봇'기능을 지원하지 않는 SQL 2000을 사용하고 있습니다 루프와 코드를 요구 사항에 따라 사용해야하는 경우 – AnandPhadke

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 
3

불행히도, SQL 서버 2000은 PIVOT 기능을 가지고 있지 않지만 동적 SQL을 사용하여 복제 할 수 SQL 서버의 PIVOT 기능을 사용해보십시오.

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 With Demo

+0

SQL Server 2005에'NVARCHAR (MAX)'가 도입되지 않았습니까? ('@query' 변수) – Bridge

+0

@Bridge 네 말이 맞아. 테스트 할 SQL Server 2000 버전 코드는'varchar (8000)'또는'text' 필드를 사용해야합니다. – Taryn

+0

이제 upvote를 가질 수 있습니다 :-) – Bridge