2011-09-30 5 views
1
나는 다음과 같은 행이

: 어떻게 해결하는캐스케이드 그룹화 SQL 행

<Order> 
<Customer>John</Customer> 
<PartNumbers> 
    <PartNumber>15</PartNumber><PartNumberPrice>10</PartNumberPrice> 
    <PartNumber>16</PartNumber><PartNumberPrice>15</PartNumberPrice> 
</PartNumbers> 
<Hardware> 
    <HardwareId>1</HardwareId><HardwareValue>1000</HardwareValue> 
    <HardwareId>1</HardwareId><HardwareValue>500</HardwareValue> 
</Hardware> 
</Orders> 

어떤 생각 다음

ID|Customer | Part Number | Part Number Price | Hardware ID | Hardware Value 
------------------------------------------------------------------------------ 
1 | John |  15  |  10   |  1  | 1000 
2 | John |  16  |  15   |  2  | 500 

내가 SQL 서버에서 얻으려고 출력입니다 이 하나?

감사합니다.

답변

1
declare @T table 
(
    ID int, 
    Customer varchar(10), 
    [Part Number] int, 
    [Part Number Price] int, 
    [Hardware ID] int, 
    [Hardware Value] int 
) 

insert into @T values 
(1, 'John', 15, 10, 1, 1000), 
(2, 'John', 16, 15, 2, 500) 

select T1.Customer as Customer, 
     (select T2.[Part Number] as PartNumber, 
       T2.[Part Number Price] as PartNumberPrice 
     from @T as T2 
     where T1.Customer = T2.Customer  
     for xml path(''), root('PartNumbers'), type), 
     (select T2.[Hardware ID] as HardwareId, 
       T2.[Hardware Value] as HardwareValue 
     from @T as T2 
     where T1.Customer = T2.Customer  
     for xml path(''), root('Hardware'), type) 
from @T as T1 
group by T1.Customer 
for xml path(''), root('Order') 
1

자기 조인이 약간 재미있을 수도 있지만 테이블이 제대로 정상화되지 않았기 때문입니다. 공백 없이도 열 이름을 고려할 수 있습니다. 이 질문에 나와

SELECT Customer as Customer, 
     (SELECT DISTINCT o.[Part Number] partNumber,o.[Part Number Price] PartNumberPrice 
     FROM yTable o 
     where t.id = o.id 
     FOR XML AUTO, TYPE), 
     (SELECT DISTINCT x.[Hardware ID] hardwareid,x.[Hardware Value] hardwarevalue 
     FROM yTable x 
     where t.id = x.id 
     FOR XML AUTO, TYPE) 
FROM yTable t 
FOR XML AUTO, TYPE 
+0

열은 당신이 맞다 만 example.But 있습니다. –