Sql server 在SQL Server中合并两个表并转换XML
我有两个包含Type1和Type2产品信息的表,还有一个包含费率信息的通用表 考虑下表结构 表1Sql server 在SQL Server中合并两个表并转换XML,sql-server,xml,sql-server-2016,Sql Server,Xml,Sql Server 2016,我有两个包含Type1和Type2产品信息的表,还有一个包含费率信息的通用表 考虑下表结构 表1Type1Product: Id Name TAX Model Class ___________________________________________________ GUID 1 Type1_Product_1 5 SUX XI GUID 2 Type1_Product_2 5 S
Type1Product
:
Id Name TAX Model Class
___________________________________________________
GUID 1 Type1_Product_1 5 SUX XI
GUID 2 Type1_Product_2 5 SUX XII
GUID 3 Type1_Product_3 5 SUX X
GUID 4 Type1_Product_4 5 SUX XIII
Id Name TAX Catalog
___________________________________________________
GUID 5 Type2_Product_1 5 IXM
GUID 6 Type2_Product_2 5 IXM
GUID 7 Type2_Product_3 5 IXM
GUID 8 Type2_Product_4 5 IXM
表2Type2Product
:
Id Name TAX Model Class
___________________________________________________
GUID 1 Type1_Product_1 5 SUX XI
GUID 2 Type1_Product_2 5 SUX XII
GUID 3 Type1_Product_3 5 SUX X
GUID 4 Type1_Product_4 5 SUX XIII
Id Name TAX Catalog
___________________________________________________
GUID 5 Type2_Product_1 5 IXM
GUID 6 Type2_Product_2 5 IXM
GUID 7 Type2_Product_3 5 IXM
GUID 8 Type2_Product_4 5 IXM
表3费率
:
Id ProductId Rate
___________________________________________________
GUID 11 GUID 1 15
GUID 12 GUID 2 25
GUID 13 GUID 3 33
GUID 14 GUID 4 11
GUID 15 GUID 5 5
GUID 16 GUID 6 8
GUID 17 GUID 7 2
GUID 18 GUID 8 4
现在我有了下面的SQLSELECT
querywithunion
SELECT
t1.Id, t1.Name, rt.Rate
FROM
Rate rt
INNER JOIN
Type1Product t1 ON t1.Id = rt.ProductId
UNION
SELECT
t2.Id, t2.Name, rt.Rate
FROM
Rate rt
INNER JOIN
Type2Product t2 ON t2.Id = rt.ProductId
FOR XML PATH ('Product'), ELEMENTS, root ('Root')
注意:GUID
是唯一标识符“guid1”表示唯一标识符,为便于理解,我使用了“guid1”等关键字
我在执行时出错
关键字“FOR”附近的语法不正确
请帮助我。使用下面的代码
with tamp as (
SELECT
t1.Id, t1.Name, rt.Rate
FROM
Rate rt
INNER JOIN
Type1Product t1 ON t1.Id = rt.ProductId
UNION
SELECT
t2.Id, t2.Name, rt.Rate
FROM
Rate rt
INNER JOIN
Type2Product t2 ON t2.Id = rt.ProductId
)
select * from temp FOR XML PATH ('Product'), ELEMENTS, root ('Root')
您必须将Union语句包装在一个SELECT语句中,如下所示
SELECT(
SELECT *
FROM(
SELECT
t1.Id, t1.Name, rt.Rate
FROM
Rate rt
INNER JOIN
Type1Product t1 ON t1.Id = rt.ProductId
UNION
SELECT
t2.Id, t2.Name, rt.Rate
FROM
Rate rt
INNER JOIN
Type2Product t2 ON t2.Id = rt.ProductId
) D
FOR XML PATH ('Product'), ELEMENTS, root ('Root')
) AS XMLout
对于xml*仅使用一个结果集,您可以使用CTE或子查询。。