Ik heb de onderstaande sql-query geprobeerd:
SELECT * FROM (SELECT *
FROM TABLE_A ORDER BY COLUMN_1)DUMMY_TABLE
UNION ALL
SELECT * FROM TABLE_B
Het resulteert in de volgende fout:
De ORDER BY-clausule is ongeldig in views, inline-functies, afgeleid
tabellen, subquery’s en algemene tabeluitdrukkingen, tenzij TOP of FOR
XML is ook gespecificeerd.
Ik moet order by gebruiken in union all. Hoe bereik ik dit?
Antwoord 1, autoriteit 100%
SELECT *
FROM
(
SELECT * FROM TABLE_A
UNION ALL
SELECT * FROM TABLE_B
) dum
-- ORDER BY .....
maar als u alle records van Table_A
bovenaan de resultatenlijst wilt hebben, kunt u een door de gebruiker gedefinieerde waarde toevoegen die u kunt gebruiken om te bestellen,
SELECT *
FROM
(
SELECT *, 1 sortby FROM TABLE_A
UNION ALL
SELECT *, 2 sortby FROM TABLE_B
) dum
ORDER BY sortby
Antwoord 2, autoriteit 39%
U hoeft niet echt haakjes te hebben. U kunt direct sorteren:
SELECT *, 1 AS RN FROM TABLE_A
UNION ALL
SELECT *, 2 AS RN FROM TABLE_B
ORDER BY RN, COLUMN_1
Antwoord 3, autoriteit 25%
Geen directe reactie van OP, maar ik dacht dat ik hier even zou reageren op het ERROR-bericht van de OP, wat je misschien helemaal in een andere richting wijst!
Al deze antwoorden verwijzen naar een algemeneORDER BY zodra de recordset is opgehaald en u de partij sorteert.
Wat als u onafhankelijk wilt BESTELLEN DOOR elk deelvan de UNIE, en ze nog steeds “aangesloten” wilt hebben in dezelfde SELECT?
SELECT pass1.* FROM
(SELECT TOP 1000 tblA.ID, tblA.CustomerName
FROM TABLE_A AS tblA ORDER BY 2) AS pass1
UNION ALL
SELECT pass2.* FROM
(SELECT TOP 1000 tblB.ID, tblB.CustomerName
FROM TABLE_B AS tblB ORDER BY 2) AS pass2
Let op: de TOP 1000 is een willekeurig getal. Gebruik een getal dat groot genoeg is om alle benodigde gegevens vast te leggen.
Antwoord 4
Er zullen momenten zijn waarop u iets als dit moet doen:
Trek top 5 uit tabel 1 op basis van een sortering
en onderste 5 uit tabel 2 op basis van een andere sortering
en verenig deze samen.
oplossing
select * from (
-- top 5 records
select top 5 col1, col2, col3
from table1
group by col1, col2
order by col3 desc ) z
union all
select * from (
-- bottom 5 records
select top 5 col1, col2, col3
from table2
group by col1, col2
order by col3 ) z
dit was de enige manier waarop ik de fout kon omzeilen en werkte prima voor mij.
Antwoord 5
SELECTEER * UIT (SELECTEER *
VANAF TABLE_A BESTEL DOOR COLUMN_1)DUMMY_TABLE
UNION ALLES
SELECT * FROM TABLE_B
BESTEL DOOR 2;
2 is hier kolomnummer.. In Oracle SQL kunt u het kolomnummer gebruiken waarop u de gegevens wilt sorteren
Antwoord 6
select CONCAT(Name, '(',substr(occupation, 1, 1), ')') AS f1
from OCCUPATIONS
union
select temp.str AS f1 from
(select count(occupation) AS counts, occupation, concat('There are a total of ' ,count(occupation) ,' ', lower(occupation),'s.') As str from OCCUPATIONS group by occupation order by counts ASC, occupation ASC
) As temp
order by f1