2017-01-26 4 views
0

私はすべてをラップ要素を追加したいと思いControl on XML elements nesting using FOR XMLfor xml selectにラッピング要素を追加するにはどうすればよいですか?

で作られた私の例を改善したいと思います(この例では、情報が会社についてです。)

DATA:

DECLARE @Employees table(
    CompanyID int, 
    companyDescr nvarchar(100) , 
    EmpID int NOT NULL, 
    Name nvarchar(50), 
    Surname nvarchar(50), 
    DateOfBirth date, 
    DepartmentID int, 
    AccessLevel int); 
insert into @Employees values (1,'ACME','1', 'John','Doe','1980-01-31',100,5) 
insert into @Employees values (1,'ACME', '2', 'Mary','Rose','1971-02-27',102,3) 
insert into @Employees values (1,'ACME', '3', 'Luke','Perry','1995-12-01',104,1) 

期待される結果:RESを得ることが@employeesテーブルを照会する方法

<company companyID="1"> 
    <employee Name="John" Surname="Doe" DateOfBirth="1980-01-31"> 
     <department DepartmentID="100"> 
     <security> 
      <AccessLevel>5</AccessLevel> 
     </security> 
     </department> 
    </employee> 
    <employee Name="Mary" Surname="Rose" DateOfBirth="1971-02-27"> 
     <department DepartmentID="102"> 
     <security> 
      <AccessLevel>3</AccessLevel> 
     </security> 
     </department> 
    </employee> 
    <employee Name="Luke" Surname="Perry" DateOfBirth="1995-12-01"> 
     <department DepartmentID="104"> 
     <security> 
      <AccessLevel>1</AccessLevel> 
     </security> 
     </department> 
    </employee> 
</company> 

ウルトラ?

私が見つけた唯一の方法は、リンクされた質問のクエリを文字列変数に保存し、前後に手動でデータを追加することです。

クエリで結果を得ることは可能ですか?

答えて

0

あなたはこのような企業IDのためのサブクエリを相関することができます

select 
    companyid as "@companyID", 
    cast((
     select name as "@Name", 
      surname as "@Surname", 
      dateofbirth as "@DateOfBirth", 
      departmentid as "department/@departmentID", 
      accesslevel as "department/security/AccessLevel" 
     from @employees e2 
     where e2.companyid = e1.companyid 
     for xml path('employee') 
    ) as xml) 
from @employees e1 
group by companyid for xml path('company'); 

が生成されます

<company companyID="1"> 
    <employee Name="John" Surname="Doe" DateOfBirth="1980-01-31"> 
    <department departmentID="100"> 
     <security> 
     <AccessLevel>5</AccessLevel> 
     </security> 
    </department> 
    </employee> 
    <employee Name="Mary" Surname="Rose" DateOfBirth="1971-02-27"> 
    <department departmentID="102"> 
     <security> 
     <AccessLevel>3</AccessLevel> 
     </security> 
    </department> 
    </employee> 
    <employee Name="Luke" Surname="Perry" DateOfBirth="1995-12-01"> 
    <department departmentID="104"> 
     <security> 
     <AccessLevel>1</AccessLevel> 
     </security> 
    </department> 
    </employee> 
</company> 
関連する問題