Gibt es eine Möglichkeit, die unten Abfrage zu verbessern?Join mit Union in SQL-Abfrage Tötung Leistung
Die folgende Abfrage gibt das richtige Ergebnis, aber die Leistung zu töten.
Gibt es eine Möglichkeit, die unten Abfrage zu verbessern?Join mit Union in SQL-Abfrage Tötung Leistung
Die folgende Abfrage gibt das richtige Ergebnis, aber die Leistung zu töten.
Vielleicht so etwas?
Select
ID,
max(case when MYDATE = '20160105 10:00:00' then PRICE else 0 end),
max(case when MYDATE = '20140805 10:00:00' then PRICE else 0 end),
max(case when MYDATE = '20170215 10:00:00' then PRICE else 0 end)
FROM
(
select ID, PRICE FROM TABLE1 WHERE MYDATE in ('20160105 10:00:00', '20140805 10:00:00', '20170215 10:00:00')
UNION ALL
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE in ('20160105 10:00:00', '20140805 10:00:00', '20170215 10:00:00')
) A
group by ID
Erraten wäre einfacher, wenn Sie Beispiele zur Verfügung gestellt hätte ...
Sie könnten ein() vermeiden, die A.ID verwenden für beitreten und dies könnte einen gewissen Nutzen für die Leistung produzieren
Select A.ID, A.[2016 Price], B.[2014 Price], C.[2017 Price]
FROM
(
select ID, PRICE [2016 Price] FROM TABLE1 WHERE MYDATE = 2016-01-05 10:00:00
UNION
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE = 2016-01-05 10:00:00
) A
INNER JOIN
(
select ID, PRICE [2014 Price] FROM TABLE1 WHERE MYDATE = 2014-08-05 10:00:00
UNION
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE = 2014-08-05 10:00:00
) B ON A.ID =B.ID
INNER JOIN
(
select ID, PRICE [2017 Price] FROM TABLE1 WHERE MYDATE = 2017-02-15 10:00:00
UNION
SELECT ID, PRICE FROM TABLE2 WHERE MYDATE = 2017-02-15 10:00:00
) ON A.ID =C.ID
Ist jede individuelle Abfrage auch langsam? Haben Sie einen Index für die ID-Spalte? BTW, ich denke, Sie müssen PIVOT verwenden, anstatt eine solche Abfrage zu schreiben. – FLICKER
Sie sollten mit Indizes für die ID beginnen und wenn Sie keine doppelten IDs zwischen table1 und table2 erwarten, können Sie Union durch Union All ersetzen. – NotCaring
@FLICKER: Danke. Ich habe einen Index für ID. Ist es möglich durch Pivot. schlagen Sie bitte vor, –