2014-04-25 2 views
-1

제공되는 샘플 표에서 원하는 결과를 얻고 싶습니다. 결과로 SQL 결과 열 값

나는이 문제를 처리하기 위해 SQL을 만드는 어려움을 겪고되었습니다

CREATE TABLE a (account nvarchar(10), accountname nvarchar(10)); 
CREATE TABLE b (bid int, bdesc nvarchar(10)); 
CREATE TABLE C (cid int, bid int, caccount nvarchar(10)); 

INSERT INTO a VALUES ('a1','a1val'); 
INSERT INTO a VALUES ('b1','b1val'); 
INSERT INTO a VALUES ('c1','c1val'); 
INSERT INTO a VALUES ('d1','d1val'); 

INSERT INTO b VALUES (1,'val1'); 
INSERT INTO b VALUES (2,'val2'); 
INSERT INTO b VALUES (3,'val3'); 

INSERT INTO c VALUES (1,1,'a1'); 
INSERT INTO c VALUES (2,1,'b1'); 
INSERT INTO c VALUES (3,2,'a1'); 
INSERT INTO c VALUES (4,3,'c1'); 

--Desired results 
--accountname val1 val2 val3 
--a1val  x  x 
--b1val  x 
--c1val     x 
--d1val 

select * from a 
select * from b 
select * from c 

drop table a, b, c 
+1

가능한 중복 (http://stackoverflow.com/questions/1768586/sql-convert-rows-to-columns) 앞으로 이동하기에 충분한 저를 얻어야한다 –

답변

0

이 솔루션은 bdesc 구별 값의 수를 작동합니다. [SQL이 컬럼에 행 변환]의

declare @dynamicSQL varchar(max) = '' 
declare @columnList varchar(max) = '' 
declare @unique table ([bdesc] varchar(10)) 
insert into @unique 
select distinct [bdesc] from b 
select @columnList = @columnList + '[' + bdesc + '],' from @unique 
set @columnList = SUBSTRING(@columnList, 0, LEN(@columnList)) 
set @dynamicSQL = '' + 
'select * 
from 
(
select accountname, bdesc 
from a as a 
left join c as c 
on a.account = c.caccount 
left join b as b 
on c.bid = b.bid 
) as src 
pivot(
max(bdesc) 
for bdesc in (' + @columnList + ')' + ' 
) as pvt' 
exec(@dynamicSQL) 
+0

. 고맙습니다. – user3301576

+0

큰 문제는 val1, 2 및 3이 하드 코드 된 것입니다. 나는이 예제에서 테이블 b의 내용을 결코 알지 못할 것입니다. – user3301576

+0

@ user3301576 - 오 ... 이제 당신은 그것을 언급합니다. –