sqlserver rows to column
SELECT p1.CategoryId,
( SELECT ProductName + ','
FROM Northwind.dbo.Products p2
WHERE p2.CategoryId = p1.CategoryId
ORDER BY ProductName
FOR XML PATH('') ) AS Products
FROM Northwind.dbo.Products p1
GROUP BY CategoryId ;
대충 보면 이해가지?
안가면 테이블 변수 바꿔서 돌려보길 바랍니다.
뭐 대충 안에있는거 xml 화 해서 포맷 없이 모으고 그걸 바깥에 테이블이랑 매핑해서 보여줌?
정도 지 않을까 싶다. 정확한 정보와 그 밖의 다른 정보를 위해서는 위 URL에 접속해 보길 바란다.
mssql 은 과연 이방법 뿐일까?
오라클은 ListAgg() 함수를 사용하면 그냥 바로 볼 수 있는데.
아니면 rownumber와 depth 를 줘서 구조화 기능을 약간 꽈서 사용하는 법도 있고,
개인 테스트 완료.
모르는 점은 댓글로.
성공한 사항도 댓글로 달아 공유해주면 좋겠다.
개인 테스트 쿼리
select a.Sabun, a.Name, aa, substring(a.authlist,1,len(a.authlist)-1)
from (
select
a.sabun,
a.name, '11' as aa,
(select ''''+ convert(varchar,c.CategoryMainCode)+''', '
from dbo.tb_authority b, dbo.tb_maincategory c
where a.userid = b.userid and b.orgcode = c.orgcode
order by 1
for XML path('')) authlist
from dbo.TB_User a
where 1=1
group by
a.sabun,
a.name,
a.UserID
) a
where a.authlist > '' and a.Sabun = '120000340' and a.Sabun= '120000340';
select a.Sabun, a.Name, a.OrgCode, ''''+substring(a.authlist,1,len(a.authlist)-1) , a.log
from (
select
a.sabun,
a.name, '11' as OrgCode,
(select convert(varchar,c.categorymaincode)+', '
from dbo.tb_authority b, dbo.tb_Maincategory c
where a.userid = b.userid and b.orgcode=c.orgcode
order by 1
for XML path('')) authlist, '2' as log
from dbo.TB_User a
where 1=1
group by
a.sabun,
a.name,
a.UserID
) a
where a.authlist > '' and a.Sabun = ':USER' and \
a.Sabun=':PASSWORD';