2011-11-12 11 views
6

Così ho le seguenti istruzioni SELECT:Join risultati "generati" da due istruzioni SELECT con schemi diversi in una tabella

SELECT COUNT(A.Award) AS US, SUBSTRING(CAST(M.Year as char(4)), 0 , 4) AS Decade 
FROM Movies M, Awards A 
WHERE {SOME WHERE CLAUSE} 
GROUP BY Decade; 

e

SELECT COUNT(*) AS Total, SUBSTRING(CAST(A2.Year as char(4)), 0 , 4) AS Decade 
FROM Awards A2 
WHERE {SOME WHERE CLAUSE} 
GROUP BY Decade; 

Il primo è "generare" un tavolo con colonne (US, Decade) e il secondo "genera" un'altra tabella con colonne (Totale, Decade). Voglio unirmi a questi due tavoli in modo da ottenere un tavolo (US, Totale, Decennio). Come posso farlo?

risposta

16

Metteteli in sottoquery e fare un JOIN:

SELECT a.US, a.decade, b.total FROM 

    (SELECT COUNT(A.Award) AS US, SUBSTRING(CAST(M.Year as char(4)), 0 , 4) AS Decade 
    FROM Movies M, Awards A 
    WHERE {SOME WHERE CLAUSE} 
    GROUP BY Decade) AS a 

INNER JOIN 

    (SELECT COUNT(*) AS Total, SUBSTRING(CAST(A2.Year as char(4)), 0 , 4) AS Decade 
    FROM Awards A2 
    WHERE {SOME WHERE CLAUSE} 
    GROUP BY Decade) AS b 

ON a.decade = b.decade 
+1

Solo un problema minore: preferirei non 'SELECT *' 'ma SELEZIONA a.US, a.DECADE, b.TOTAL' così hai vinto ottenere DECADE per due volte nel risultato. – tobiasbayer

+0

@CodeBrickie: sì, grazie! – knittl

+0

Funziona come un fascino :) GRAZIE! –

Problemi correlati