2017-07-14 3 views
0

Ich habe zwei Tabellen, die die Produktinformationen von Type1 und Type2 und eine gemeinsame Tabelle, die Rate Informationen enthält.Union zwei Tabellen und XML in SQL Server konvertieren

Betrachten wir die folgenden Tabellenstrukturen

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

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

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

Jetzt habe ich die folgende SQL-SELECT Abfrage mit 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') 

Hinweis: GUID ist eine eindeutige Kennung „GUID 1“ eine eindeutige Kennung darstellt, für ein leichteres Verständnis habe ich die die Schlüsselwörter wie „GUID 1“

verwendet

ich erhalte Fehler während der Ausführung

falsche Syntax nahe dem Schlüsselwort ‚FOR‘.

Bitte helfen Sie mir.

+0

Für xml * Arbeit wickeln mit nur einem einzigen Ergebnis eingestellt haben, können Sie CTE verwenden oder Unterabfrage .. –

Antwort

0

Verwenden Sie den folgenden Code

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') 
0

Sie haben Ihre Union-Anweisung in einer einzelnen SELECT-Anweisung wie diese

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