合并两个表并在 SQL 服务器中转换 XML
Union two tables and convert XML in SQL Server
我有两个包含 Type1 和 Type2 产品信息的 table 和一个包含费率信息的普通 table。
考虑以下 table 结构
Table #1 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
Table #2 Type2Product
:
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
Table #3 Rate
:
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
现在我有以下 SQL SELECT
使用 UNION
的查询
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
是一个unique identifier "GUID 1"代表一个unique Identifier,为了方便理解我用了关键字like "GUID 1"
我在执行时遇到错误
Incorrect syntax near the keyword '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
我有两个包含 Type1 和 Type2 产品信息的 table 和一个包含费率信息的普通 table。
考虑以下 table 结构
Table #1 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
Table #2 Type2Product
:
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
Table #3 Rate
:
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
现在我有以下 SQL SELECT
使用 UNION
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
是一个unique identifier "GUID 1"代表一个unique Identifier,为了方便理解我用了关键字like "GUID 1"
我在执行时遇到错误
Incorrect syntax near the keyword '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