J'ai deux table "Table A" et "Table B"
Le tableau A est le résultat des jointures avec d'autres tables. Et le tableau B est une table séparée avec 1 champ commun dans le tableau A.
Tableau A:
Year Name Value 2011 A Item1 2010 B 1 2011 C Item2
Tableau B:
id Value 1 Item1 2 Item2 3 Item3 4 Item4
Je veux que le résultat soit comme:
Year Name Value 2011 A Item1 2010 B NULL 2011 C Item2
Mes efforts sont:
SELECT d.Portfolio, d.Name, d.AccountName, d.CashGAAP, d.OriginalDate, d.Amount, d.AccountNumber, d.AtsortingbuteSetName, d.TheDate, d.Year, d.Value FROM (SELECT Portfolio.LegalEntityName AS Portfolio, Forecast.Name, CoA.AccountName, Forecast_Data.CashGAAP, CONVERT(DATE, Forecast_Data.TheDate) AS OriginalDate, SUM(Forecast_Data.Amount) AS Amount, CoA.AccountNumber , Atsortingbute_Set.AtsortingbuteSetName, '' + CONVERT(VARCHAR, YEAR(Forecast_Data.TheDate)) + '-' + CONVERT(VARCHAR, MONTH(Forecast_Data.TheDate)) + '-01' AS TheDate, YEAR(Forecast_Data.TheDate) AS Year, Forecast_Atsortingbute.Value FROM Portfolio INNER JOIN Forecast ON Portfolio.PortfolioID = Forecast.PortfolioID INNER JOIN Forecast_Account ON Forecast.ForecastID = Forecast_Account.ForecastID INNER JOIN Forecast_Data ON Forecast_Account.ForecastAccountID = Forecast_Data.ForecastAccountID INNER JOIN CoA ON CoA.AccountNumber = Forecast_Account.AccountNumber INNER JOIN Atsortingbute_Set ON CoA.AtsortingbuteSetID = Atsortingbute_Set.AtsortingbuteSetID INNER JOIN Forecast_Atsortingbute ON Forecast_Account.ForecastAccountID = Forecast_Atsortingbute.ForecastAccountID WHERE (Forecast.ForecastID = 5) OR (Forecast.ForecastID = 6) GROUP BY Portfolio.LegalEntityName, Forecast.Name, CoA.AccountName, Forecast_Data.CashGAAP, Forecast_Data.TheDate, CoA.AccountNumber, Atsortingbute_Set.AtsortingbuteSetName, Forecast_Atsortingbute.Value) AS d LEFT OUTER JOIN Vendor ON d.Value = Vendor.VendorName
J'ai renommé les exemples de tables qui sont expliqués dans Question:
Table A = d Table B = Vendor
Vous B.Value
B à l'A et afficher B.Value
au lieu de A.Value
dans la list SELECT:
SELECT Year, Name, B.Value FROM A LEFT JOIN B on A.Value=B.Value
select A.Year, A.Name, B.Value from A left join B on A.Value= B.value;
Le mot key INNER JOIN
sélectionne toutes les lignes des deux tables tant qu'il existe une correspondance entre les colonnes des deux tables
Vous devez appliquer LEFT JOIN
SELECT column_name(s) FROM TableA LEFT OUTER JOIN TableB ON tableA.Value=tableB.Value;
Le mot key LEFT JOIN
renvoie toutes les lignes de la table de gauche (tableA), avec les lignes correspondantes dans la table de droite (tableB). Le résultat est NULL
dans le côté droit lorsqu'il n'y a pas de correspondance.