以xml格式获取sql查询结果?

时间:2017-06-05 08:29:47

标签: sql-server

您好我在sql server中尝试以xml格式获取结果但是我没有得到propare xml格式的许多数据,它以xml格式重复。我已经在sql server中编写了这个查询,但没有得到propare数据。任何人都知道我的错误在哪里,请让我知道怎么做。

我在这里写了这个查询:

select * from (

    SELECT SSCF.SubSubCategoryId AS InterestId,c.FeedId,c.Description,u.UserId,u.Email,u.UserName,u.ProfileImage,u.Name,
           ISNULL(SSCL.SubSubCategory,SSC.SubSubCategory) AS Interest,
           1 AS [Type]
    FROM SubSubCategoryFollowers SSCF
    LEFT JOIN SubSubCategories SSC ON SSCF.SubSubCategoryId = SSC.SubSubCategoryId              
    INNER JOIN Feed c on c.FeedId = SSC.FeedId
    inner join Users u on u.UserId = SSCF.UserId
    WHERE u.Email is not null

    UNION ALL

    SELECT  SCF.SubCategoryId AS InterestId,c.FeedId,c.Description,u.UserId,u.Email,u.UserName,u.ProfileImage,u.Name,
           ISNULL(SCL.SubCategory,SC.SubCategory) AS Interest,
           2 AS [Type]
    FROM SubCategoryFollowers SCF
    LEFT JOIN SubCategories SC ON SCF.SubCategoryId = SC.SubCategoryId              
    INNER JOIN Feed c on c.FeedId = SC.FeedId
    inner join Users u on u.UserId = SCF.UserId
    WHERE u.Email is not null 

 )as res 

group by res.UserId,res.InterestId,res.FeedId,res.Description,res.Email,res.Interest,res.Type,res.UserName,res.ProfileImage,res.Name
order by res.FeedId             
OFFSET 1   ROWS
FETCH NEXT  50000   ROWS ONLY
FOR XML PATH('User'), ROOT ('Users')    

这是我目前的op =>

 <Users>
  <User>
    <UserId>1660</UserId>
    <Email>xyz.com</Email>
    <UserName>xyz</UserName>
    <ProfileImage>20160717035320958.jpeg</ProfileImage>     
    <InterestId>15</InterestId>
    <FeedId>4689</FeedId>
    <Description>Test</Description>         
    <Interest>Event</Interest>
    <Type>2</Type>
</User>
<User>  
     <UserId>1660</UserId>
    <Email>xyz.com</Email>
    <UserName>xyz</UserName>
    <ProfileImage>20160717035320958.jpeg</ProfileImage> 
    <InterestId>16</InterestId>
    <FeedId>4689</FeedId>
    <Description>Test</Description>        
    <Interest>Party</Interest>
    <Type>2</Type>
</User>
<User>
    <UserId>1660</UserId>
    <Email>xyz.com</Email>
    <UserName>xyz</UserName>
    <ProfileImage>20160717035320958.jpeg</ProfileImage> 
    <InterestId>21</InterestId>
    <FeedId>4689</FeedId>
    <Description>Test</Description>      
    <Interest>Club</Interest>
    <Type>2</Type>
</User>
<User>
<UserId>1661</UserId>
<Email>abc.com</Email>
<UserName>abc</UserName>
<ProfileImage>20160717035320959.jpeg</ProfileImage>     
<InterestId>15</InterestId>
<FeedId>4690</FeedId>
<Description>Test1</Description>         
<Interest>Cricket</Interest>
<Type>1</Type>  

 

我的预期o / p =&gt;

<Users>
 <User>
 <UserId>1660</UserId>
<Email>xyz.com</Email>
<UserName>xyz</UserName>
 <ProfileImage>20160717035320958.jpeg</ProfileImage>  

<InterestId>15</InterestId>
<FeedId>4689</FeedId>
<Description>Test</Description>         
<Interest>Event</Interest>
<Type>2</Type>

<InterestId>16</InterestId>
<FeedId>4689</FeedId>
<Description>Test</Description>        
<Interest>Party</Interest>
<Type>2</Type>

<InterestId>21</InterestId>
<FeedId>4689</FeedId>
<Description>Test</Description>      
<Interest>Club</Interest>
<Type>2</Type>
</User>
<User>
<UserId>1661</UserId>
<Email>abc.com</Email>
<UserName>abc</UserName>
<ProfileImage>20160717035320959.jpeg</ProfileImage>  

<InterestId>15</InterestId>
<FeedId>4690</FeedId>
<Description>Test1</Description>         
<Interest>Cricket</Interest>
<Type>1</Type>  

 

我想要这个xml格式的数据,任何人都知道,请告诉我。

2 个答案:

答案 0 :(得分:2)

我们的想法是通过标记路径标记为xml提供所需的格式。 不幸的是,我没有时间通过​​你的sqls工作,但这是一个通过标记分组的例子:

select UserId as "User" , InterestId as "User/InterestId" from
(select '1' as 'UserId', 'I1' as 'InterestId'
union all 
select '1' as 'UserId', 'I2' as 'InterestId') x
for xml path(''), root('Users')

答案 1 :(得分:2)

我举个例子。 您可以使用TYPE来获取嵌套的xml

DECLARE @SampleData AS TABLE
(
    UserId INT,
    Email varchar(200),
    UserName varchar(200),
    InterestId int,
    Description varchar(200)
)

INSERT INTO @SampleData
(
    UserId,
    Email,
    UserName,
    InterestId,
    Description
)
VALUES
(1,'1@abc.xyz','User1', 100, 'Description 100'),
(1,'1@abc.xyz','User1', 101, 'Description 101'),
(1,'1@abc.xyz','User1', 102, 'Description 102'),
(1,'1@abc.xyz','User1', 103, 'Description 103')


SELECT  sd.UserId,
       sd.Email,
       sd.UserName,
       (
          SELECT sd2.InterestId,
                sd2.Description 
          FROM @SampleData sd2
          WHERE sd2.UserId = sd.UserId
          FOR XML PATH (''), TYPE
       ) 
FROM 
(   select DISTINCT sd.UserId, sd.Email, sd.UserName
    FROM @SampleData sd
) sd
FOR XML PATH('User') ,ROOT('Users')

返回

<Users>
  <User>
    <UserId>1</UserId>
    <Email>1@abc.xyz</Email>
    <UserName>User1</UserName>
    <InterestId>100</InterestId>
    <Description>Description 100</Description>
    <InterestId>101</InterestId>
    <Description>Description 101</Description>
    <InterestId>102</InterestId>
    <Description>Description 102</Description>
    <InterestId>103</InterestId>
    <Description>Description 103</Description>
  </User>
</Users>

演示链接:http://rextester.com/KKEHCR86171