显示与另一个表sql server不匹配的空值

Dee*_*rma 2 sql t-sql sql-server sql-server-2008

我有两个表"表A"和"表B"

表A是与其他表连接的结果.表B是一个单独的表,表A中有1个字段.

表A:

Year   Name  Value
2011   A     Item1
2010   B      1
2011   C     Item2
Run Code Online (Sandbox Code Playgroud)

表B:

id   Value
1    Item1
2    Item2
3    Item3
4    Item4
Run Code Online (Sandbox Code Playgroud)

我希望结果如下:

Year   Name  Value
2011   A     Item1
2010   B      NULL
2011   C     Item2
Run Code Online (Sandbox Code Playgroud)

我的努力是:

SELECT d.Portfolio,
       d.Name,
       d.AccountName,
       d.CashGAAP,
       d.OriginalDate,
       d.Amount,
       d.AccountNumber,
       d.AttributeSetName,
       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 ,
             Attribute_Set.AttributeSetName,
             '' + CONVERT(VARCHAR, YEAR(Forecast_Data.TheDate)) + '-'
             + CONVERT(VARCHAR, MONTH(Forecast_Data.TheDate)) + '-01' AS TheDate,
             YEAR(Forecast_Data.TheDate) AS Year,
             Forecast_Attribute.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 Attribute_Set 
        ON CoA.AttributeSetID = Attribute_Set.AttributeSetID
     INNER JOIN Forecast_Attribute 
        ON Forecast_Account.ForecastAccountID = 
              Forecast_Attribute.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,
              Attribute_Set.AttributeSetName,
              Forecast_Attribute.Value) 
     AS d
     LEFT OUTER JOIN Vendor ON d.Value = Vendor.VendorName
Run Code Online (Sandbox Code Playgroud)

我重命名了问题中解释的示例表:

Table A = d
Table B = Vendor
Run Code Online (Sandbox Code Playgroud)

val*_*lex 7

你应该把JO B加到A并显示B.Value而不是A.Value在SELECT列表中:

SELECT Year, Name, B.Value
FROM A 
LEFT JOIN B on A.Value=B.Value
Run Code Online (Sandbox Code Playgroud)