【问题标题】:SQL Server connectionsSQL Server 连接
【发布时间】:2016-05-13 11:15:15
【问题描述】:

查询 1 结果为 87 行:

SELECT        
    MIN(LEFT(Date_Last_Updated, 4)) AS Year_of_Transfer,  
    MIN(RIGHT(LEFT(Date_Last_Updated, 6), 2)) AS Month_of_Transfer, 
    MIN(RIGHT(LEFT(Date_Last_Updated, 8), 2)) AS Day_of_Transfer, 
    CRS, Loan_Code, 
    MIN(Date_Last_Updated) AS Min_Date_Last_Updated
FROM            
    dbo.Transfer_Final_Accounts_CO_SH
WHERE        
    (LEFT(Date_Last_Updated, 4) >= '2016') 
    AND (Subcategory = 'Transfer to Workout')
GROUP BY 
    CRS, Loan_Code
ORDER BY 
    Loan_Code

查询 2 结果为 3400000 行:

SELECT        
    Date_Last_Updated, 
    SUM(NPL_Amount_Last_Quarter) AS NPL_Amount_Last_Quarter, 
    Loan_Code, 
    SUM([Total_Balance_€]) AS Total_Balance, 
    SUM(On_Balance_Amount_Last_Quarter) AS On_Balance_Last_Q, 
    SUM([Off_Balance_Amount_€]) AS Off_Balance_Last_Q, CRS, 
    [On_Balance_Amount_€], [Off_Balance_Amount_€], [Total_Balance_€], 
    NPL_Amount_Last_Quarter AS NPL_Amount_Last_Q, 
    [NPL_Amount_€], On_Balance_Amount_Last_Quarter, 
    Material_Bucket, Material_Bucket_Last_Quarter
FROM
    dbo.Transfer_Final_Accounts_COM_WORK
GROUP BY 
    CRS, Date_Last_Updated, Loan_Code, [On_Balance_Amount_€], 
    [Off_Balance_Amount_€], [Total_Balance_€], NPL_Amount_Last_Quarter, 
    [NPL_Amount_€], On_Balance_Amount_Last_Quarter, Material_Bucket, 
    Material_Bucket_Last_Quarter

查询3连接上面的2,结果为0行:

SELECT        
    dbo.Transfer_to_Workout_Total_Balances.Total_Balance,  
    dbo.Transfer_to_Workout_Total_Balances.On_Balance_Last_Q, 
    dbo.Transfer_to_Workout_Total_Balances.Off_Balance_Last_Q,    
    dbo.Transfer_to_Workout_Total_Balances.NPL_Amount_Last_Quarter, 
    dbo.Transfer_to_workout_min_dates.Year_of_Transfer, 
    dbo.Transfer_to_workout_min_dates.Month_of_Transfer, 
    dbo.Transfer_to_workout_min_dates.Day_of_Transfer, 
    dbo.Transfer_to_workout_min_dates.CRS AS Expr1, 
    dbo.Transfer_to_workout_min_dates.Loan_Code AS Expr2, 
    dbo.Transfer_to_workout_min_dates.Min_Date_Last_Updated, 
    dbo.Transfer_to_Workout_Total_Balances.[On_Balance_Amount_€], 
    dbo.Transfer_to_Workout_Total_Balances.[Off_Balance_Amount_€], 
    dbo.Transfer_to_Workout_Total_Balances.[Total_Balance_€], 
    dbo.Transfer_to_Workout_Total_Balances.[NPL_Amount_€], 
    dbo.Transfer_to_Workout_Total_Balances.NPL_Amount_Last_Q, 
    dbo.Transfer_to_Workout_Total_Balances.On_Balance_Amount_Last_Quarter, 
    dbo.Transfer_to_Workout_Total_Balances.Material_Bucket, 
    dbo.Transfer_to_Workout_Total_Balances.Material_Bucket_Last_Quarter
FROM 
    dbo.Transfer_to_workout_min_dates 
INNER JOIN
    dbo.Transfer_to_Workout_Total_Balances ON dbo.Transfer_to_workout_min_dates.Loan_Code = dbo.Transfer_to_Workout_Total_Balances.Loan_Code 
                    AND dbo.Transfer_to_workout_min_dates.Min_Date_Last_Updated = dbo.Transfer_to_Workout_Total_Balances.Date_Last_Updated

连接有什么问题为什么我没有从上面得到结果?

【问题讨论】:

  • 第三个查询如何“连接”前两个?这三个看起来都截然不同
  • 您的查询以哪种方式“连接”?两个查询都返回一个分组结果,而查询 3 没有 GROUP BY 子句。
  • 顺便说一句,您可以为表使用别名。它会更具可读性:... FROM dbo.Transfer_to_workout_min_dates AS min_dates ...

标签: sql sql-server tsql


【解决方案1】:

当您的查询 3 未返回行但底层表 dbo.Transfer_to_workout_min_datesdbo.Transfer_to_Workout_Total_Balances 包含数据时,很可能这些表中的任何条目都不满足连接条件 (ON)。

尝试删除其中一个术语(我将从Min_Date_Last_Updated 开始)。它应该改变一些东西。然后检查两个字段的结果。您会发现它们不同,因此永远不会相等。

【讨论】:

  • 您有关于该问题的任何新信息吗?我的回答有帮助吗?
猜你喜欢
  • 2022-12-24
  • 2015-01-14
  • 2016-11-22
  • 2011-08-08
  • 2013-04-13
  • 2013-05-01
  • 2017-10-17
  • 2018-11-20
  • 2013-10-14
相关资源
最近更新 更多