declare @temp table (
menu varchar(max)
, user_id varchar(10)
)
insert into @temp
select '<menu><data no="50"></data><data no="51"></data><data no="163"></data><data no="519"></data></menu>','user1' union all
select '<menu><data no="50"></data><data no="51"></data><data no="519"></data></menu>','user2'
select * from @temp
select 50 as no , 'user1' as user_id union all
select 51 , 'user1' union all
select 163 , 'user1' union all
select 519 , 'user1' union all
select 50 , 'user2' union all
select 51 , 'user2' union all
select 519 , 'user2'
위의 쿼리를 실행해보시면 첫번째 결과를 보면 MENU라는 xml처럼 생긴 값과, user_id라는 키 값이 있습니다.
이 내용을 최종 마지막 결과 처럼 펼쳐지게 보여지게 하고 싶은데요. ㅠㅠ 영 쿼리가 어렵네요. ㅠㅠ
조언 부탁드립니다~
Comment 3
-
이리
2014.11.25 13:49
-
더따뜻한
2014.11.25 14:33
정보 감사해요. ^^*
OpenXML이라는것이 있네요. 찾아볼게요. ^^
-
자리비움
2014.11.25 18:21
select [no], [user_id]
from (
select a.[user_id]
, no1 = menu.value('(/menu/data/@no)[1]','int')
, no2 = menu.value('(/menu/data/@no)[2]','int')
, no3 = menu.value('(/menu/data/@no)[3]','int')
, no4 = menu.value('(/menu/data/@no)[4]','int')
, no5 = menu.value('(/menu/data/@no)[5]','int')
from (
select [user_id]
, menu = convert(xml,menu)
from @temp
) as a
) as a
unpivot ( [no] for col in ( no1, no2, no3, no4, no5 ) ) as pvt
-- 실행계획 살펴보세요.
-- null 확인하세요.
OPENXML을 이용해서 되지 않을까요?
http://msdn.microsoft.com/ko-kr/library/ms187897.aspx