代码之家  ›  专栏  ›  技术社区  ›  user7784919

在SQL Server中合并两个表并转换XML

  •  0
  • user7784919  · 技术社区  · 7 年前

    我有两个表,其中包含类型1和类型2的产品信息,还有一个公用表,其中包含费率信息。

    表#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
    

    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
    

    表#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 是唯一标识符“GUID 1”表示唯一标识符,为了便于理解,我使用了“GUID 1”之类的关键字

    我在执行时出错

    请帮助我。

    2 回复  |  直到 7 年前
        1
  •  0
  •   sandeep rawat    7 年前

    使用以下代码

    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')
    
        2
  •  0
  •   SQL006    7 年前

    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