Wie UNION verwendet, die beim einfügen in eine Tabelle mit SELECT-Klausel aus vielen Tabellen in SQL Server 2000
Ich bin mit SQL Server 2000. Ich habe mehrere Kriterien, die ich habe zu verwenden, extrahieren Sie unterschiedliche sets von Datensätzen aus mumtiple Tabelle in einer anderen Tabelle. Ich bin mit
INSERT INTO T1(A,B)
(SELECT E,R FROM T2)
UNION
(SELECT Z,X FROM T3)
Query analyzer wirft Fehler, die während der Verwendung UNION
verwenden, sollten Sie ORDER BY
Klausel mit SELECT
. Auch nach zu tun, dass ich m nicht in der Lage zu union zwei unterschiedliche Abfragen, die returing gleichen Spalten, die in Ihrer select-Klausel.
Was ist der richtige Weg zu legen mit SELECTS
mit UNIONS
und ORDER BY
.
Einfach loszuwerden, die Klammern und die query, die du gepostet hast sollten funktionieren im Prinzip vorausgesetzt, es gibt eine union vereinbar Ergebnis (auch wenn es 2 kartesische joins, die wahrscheinlich nicht der gewünschten Semantik). Und natürlich ist das Ergebnis müsste kompatibel sein mit der
es überrascht mich auch. Für einfache Einsätze wie CREATE TABLE BB(NAME VARCHAR(200)) INSERT INTO BB SELECT NAME FROM FS77..S_ORG_EXT WHERE NAME LIKE '%Hos%' UNION SELECT NAME FROM FS77..S_ORG_EXT WHERE NAME LIKE '%Com%' funktioniert es einwandfrei, aber für den Komplex i m die Verwendung mit unterschiedlichen SQLs retruning gleichen Spalten in select-und die verschiedenen WHERE-Klauseln mit UNION, Wirft ES eine Fehlermeldung Server: Msg 104, Ebene 15, Status 1, Linie 1 ORDER BY-Elemente müssen in der Auswahlliste angezeigt, wenn die Anweisung mit einem UNION-operator.
Vor der Verwendung von UNION, mit einzelnen INSERT Mit SELECT, ich bin mit einigen Kriterien, die in der Verknüpfung, wo ich bin mit ORDER BY COL_NAME, ohne mit COL_NAME in WÄHLEN Sie auf einen join, UNION, es ist die Schaffung problem, von dem ich m nicht in der Lage zu verstehen.
Benutzt habe ich einige Verknüpfungen wie dieser LEFT-OUTER-JOIN FS77..S_CONTACT_XM REQXM AUF REQXM.PAR_ROW_ID = ERF.ROW_ID UND REQXM.TYPE = 'Kontakt-Programm' UND REQXM.ATTRIB_03 = 'Orencia Reimb Support Services' UND REQXM.ROW_ID = (SELECT TOP 1 ROW_ID VON FS77..S_CONTACT_XM WO PAR_ROW_ID = ERF.ROW_ID UND TYPE = 'Kontakt-Programm' ORDER BY ERSTELLT DESC)
insert
Aussage-das könnte nur der Fall sein, wenn alle 4 beteiligten Tabellen nur 1 Spalte. Ehrlich gesagt der Beispiel-code, den Sie geschrieben erscheint mir ziemlich unsinnig. Können Sie erklären, warum/wo Sie mit order by
hier als das nicht sogar Funktion irgendwo?es überrascht mich auch. Für einfache Einsätze wie CREATE TABLE BB(NAME VARCHAR(200)) INSERT INTO BB SELECT NAME FROM FS77..S_ORG_EXT WHERE NAME LIKE '%Hos%' UNION SELECT NAME FROM FS77..S_ORG_EXT WHERE NAME LIKE '%Com%' funktioniert es einwandfrei, aber für den Komplex i m die Verwendung mit unterschiedlichen SQLs retruning gleichen Spalten in select-und die verschiedenen WHERE-Klauseln mit UNION, Wirft ES eine Fehlermeldung Server: Msg 104, Ebene 15, Status 1, Linie 1 ORDER BY-Elemente müssen in der Auswahlliste angezeigt, wenn die Anweisung mit einem UNION-operator.
Vor der Verwendung von UNION, mit einzelnen INSERT Mit SELECT, ich bin mit einigen Kriterien, die in der Verknüpfung, wo ich bin mit ORDER BY COL_NAME, ohne mit COL_NAME in WÄHLEN Sie auf einen join, UNION, es ist die Schaffung problem, von dem ich m nicht in der Lage zu verstehen.
Benutzt habe ich einige Verknüpfungen wie dieser LEFT-OUTER-JOIN FS77..S_CONTACT_XM REQXM AUF REQXM.PAR_ROW_ID = ERF.ROW_ID UND REQXM.TYPE = 'Kontakt-Programm' UND REQXM.ATTRIB_03 = 'Orencia Reimb Support Services' UND REQXM.ROW_ID = (SELECT TOP 1 ROW_ID VON FS77..S_CONTACT_XM WO PAR_ROW_ID = ERF.ROW_ID UND TYPE = 'Kontakt-Programm' ORDER BY ERSTELLT DESC)
InformationsquelleAutor Walker | 2011-01-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pseudo ist zu kryptisch (reduzierte?)
Es ist sehr unwahrscheinlich, dass man 2 Spalten pro cross join von 2 Tabellen in jeder der union-Komponenten
Hinweis: Wenn Sie keine order by-Klausel an alle, es muss werden am Ende von der union
@aktualisiert, basierend auf Fehler-text "Server: Msg 104, Ebene 15, Status 1, Zeile 1 ORDER BY-Elemente müssen in der Auswahlliste angezeigt, wenn die Anweisung mit einem UNION-operator"
Dieser tritt auf, wenn Sie eine union, die die versuche durchführen, UM auf eine Spalte, die nicht angezeigt wird in das Ergebnis. Betrachten Sie eine normale BESTELLUNG DURCH die Einbeziehung der nicht-ausgewählten Spalten
Den Zeilen konsistent sind, und die Abfrage kann zufrieden sein. Allerdings, wenn Sie haben
SELBST WENN xtype existiert in beiden teilen der UNION, aber die Zeit wird es vorgestellt, UM DURCH (das geht am ENDE über die gesamte ResultSet), die Spalte ist nicht vorhanden. Sie würde haben schreiben Sie (wenn Sie nicht wollen, um zu zeigen
xtype
) alsHoffe, das hilft
Das sollte wohl sein INSERT INTO T1(A,B) SELECT * FROM E,R UNION (SELECT * FROM Z,X)
InformationsquelleAutor RichardTheKiwi