2017-11-07 1 views
1

행 값을 행과 열에 나란히 표시하고 셀에 쉼표로 구분 된 두 값을 병합해야합니다. 아래 예를 참조하십시오. 어떤 도움을 주시면 감사하겠습니다.행에서 PIVOT 행의 값을 동적으로 나란히 병합하고 셀에서 쉼표로 구분 된 2 개의 값을 연결합니다.

Table1 

Toys CostPrice SellingPrice 
---- --------- ------------- 
A  10.55  12.60 
B  7.60  8.90 
C  8.90  10.50 
D  11.50  13.40 
E  17.50  20.30 
F  2.57  3.50 

이 형식으로 표시해야합니다. 감사.

Toys A    B   C   D   E   F 
---- -----   -------  ----   ---   ----  --- 
A  10.55,12.60 
B     7.60,8.90 
C        8.90,10.50 
D           11.50,13.40 
E              17.50,20.30 
F                 2.57,3.50 
+1

SQL에서 가장 단순하지는 않지만 ... SQL은 데이터 검색 레이어로, 표시 레이어가 많지 않습니다. 가장 쉬운 방법 이것은 결과를 Excel로 내보내고 피벗되도록합니다. 당신이 순수한 SQL 응답을 원한다면,이 질문은 매일 약 10 번 여기에옵니다 .... 대답을 위해 사이트를 검색하십시오. – Twelfth

+0

어느 dbms ???????? – Eric

+0

Microsoft SQL 2012 – Etex

답변

0

좋아, 한번 더! 먼저, 예를 들어 테이블 변수 대신 임시 테이블을 만들었고 @tablecolumns 변수는이를 필요로합니다. 실제로 적용되지는 않지만 코드를 복사/붙여 넣기하면 변경 사항을 알게되었습니다.

@tablecolumns는 필요한 동적 조각이며, 피벗 테이블의 경우 "[A], [B], [C] ...."처럼 보입니다.

이제 @tablecolumns 변수에 올바르게 던져 넣기 위해 동적 SQL로 쿼리를 실행해야합니다.

create table #toystab (Toys nvarchar(1), Cost decimal (5,2), Sell decimal (5,2)) 

insert into #toystab values ('A', 5.50, 6.60) 
insert into #toystab values ('B', 6.50, 7.60) 
insert into #toystab values ('C', 7.50, 8.60) 
insert into #toystab values ('D', 8.50, 9.60) 
insert into #toystab values ('E', 11.50, 12.60) 
insert into #toystab values ('F', 13.50, 14.60) 

DECLARE @tablecolumns nvarchar(max) 
select @tablecolumns = (COALESCE(@tablecolumns +',', '') 
         + '[' + convert(nvarchar(10), #Toystab.Toys) +']') 
from #toystab 


declare @Query nvarchar(max) 
set @Query = ' 
select * 
from (
select Toys Toy1, Toys ToyName, 
CONCAT(cast(Cost as varchar(10)), '','', cast(Sell as varchar(10))) as [ConcatenatedPrice] 
from #toystab) Toyz 

pivot 
(
MAX(ConcatenatedPrice) 
for Toy1 in (' + @tablecolumns+ ') 
) 
as [Pivot] 
' 
exec(@Query) 

drop table #toystab 
(실제 쿼리가 도착하는 방법을 집중적에 따라 당신이보기에서 쿼리 자체를 놓고 대신 뷰에서 필요한 연결하여/선택하기로 결정할 수있다, 나는 동적 SQL 그렇게 가끔이 쉽게 홀수 비트를 찾을 수)

몇 가지 유의하십시오. 먼저, Toys 열을 두 번 선택합니다. 한 번 피벗하고 한 번 열을 계속 선택합니다. 둘째, CONCAT 문에서 구분 기호 '', ''는 따옴표 (")가 아니며 두 개의 아포스트로피 ('')입니다. 따옴표를 지정하면", "잘못된 열 오류가 발생합니다. 마지막으로 (@query)에 괄호가 포함되어 있는지 확인하십시오.

+0

일부 ISNULL로 정리하여 NULL 응답을 비워 둘 수 있습니다. – BWoods

+0

감사합니다. Bwoods. 귀하의 형식은 내가 원했던 것이지만 나는 매번 얼마나 많은 장난감 이름을 가지고 있는지 모르기 때문에 장난감 이름을 가로 질러 가로 질러 열을 동적으로 만들 필요가 있습니다. 첫 달과 다음 달에 A에서 F까지 A ~ Z 일 수 있습니다. 또한 장난감 이름이 항상 알파벳으로 변경되는 것은 아닙니다. 예를 들어 실제 이름이 다른 경우 A부터 F까지 사용했습니다. 동적으로 처리하는 방법이 있는지 알려주십시오. 감사. – Etex

+0

질문을 업데이트 한 이래 ... 최근에 비슷한 일을했습니다. 나는 기회가있을 때 대답을 업데이트 할 것이다. – BWoods

0

당신의 형식은 원했지만 형식은 가로로 열과 아래로 행렬을 동적으로 만들 필요가 있습니다. 내가 처음부터 끝까지 A ~ F 일 수 있고 다음 달에는 A ~ Z 일 수있는 장난감 이름이 있습니다. 장난감 이름은 항상 알파벳으로 표시되지 않을 수도 있습니다. 예를 들어 A부터 F까지 사용했습니다. 실제 이름이 다르다면 동적으로 처리하는 방법이 있는지 알려주세요. 감사합니다.

관련 문제