使用多个条件在SQL Report Builder中连接两个表

时间:2018-03-19 17:28:29

标签: sql sql-server report

我正在使用SQL Report Builder 2016。 我有2个表,名为assets和DepreciationInfo, 以下是这些表的结构。 表资产:

ID |名称|成本|上一个部分|上一个部分期间|使用优先级|

值就像

123 |名称| 10000 | 4000 | 2014年6月3日|真|

表DepreciationInfo:

ID |结束日期| CurrentDepreciation | AccumulatedDepreciation | CarryingValue |每月|

值就像

123 | 2020-04-30 00:00:00.000 | 2000 | 5000 | 5000 | 0/1 |

我想实现以下目标;

我想从表资产中选择id,并将显示上表中所有上述字段以及表格信息中基于“ID”的文件ID,列“ID”在两个表中都相同。

我使用下面提到的查询成功获取了两个表中Id相同时的所有值。

 SELECT
  Assets.ID
  ,Assets.Name
  ,Assets.Cost
  ,Assets.Prior Dep
  ,Assets.Prior Dep Period
  ,Assets.Use Prior
  ,DepreciationInfo.EndDate
  ,DepreciationInfo.CurrentDepreciation
  ,DepreciationInfo.AccumulatedDepreciation
  ,DepreciationInfo.CarryingValue
  ,DepreciationInfo.DepID
  ,DepreciationInfo.Monthly
FROM
  Assets
  INNER JOIN DepreciationInfo
    ON Assets.AssetID = DepreciationInfo.AssetID

where DepreciationInfo.EndDate=@EndDate and DepreciationInfo.Monthly=0

我想要的是,我想显示表资产的所有结果,无论这些ID是否存在于表DepreciationInfo中。

我尝试了所有外连接并且结果相同,它显示了具有内部和外部连接的记录数。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

将内部联接更改为左联接,您将看到表资产的所有结果,无论表DepreciationInfo中是否存在相应的assetid值。这里唯一的问题是查询仍将受到where子句中的两个过滤器的限制。我建议您更改它们以尽可能过滤掉资产表中的字段:

SELECT
  Assets.ID
  ,Assets.Name
  ,Assets.Cost
  ,Assets.Prior Dep
  ,Assets.Prior Dep Period
  ,Assets.Use Prior
  ,DepreciationInfo.EndDate
  ,DepreciationInfo.CurrentDepreciation
  ,DepreciationInfo.AccumulatedDepreciation
  ,DepreciationInfo.CarryingValue
  ,DepreciationInfo.DepID
  ,DepreciationInfo.Monthly
FROM
  Assets
  Left JOIN DepreciationInfo
    ON Assets.AssetID = DepreciationInfo.AssetID

where Asset.EndDateorOtherCorrespondingDateValue=@EndDate and Asset.MonthlyorOtherCorrespondingValue=0

答案 1 :(得分:0)

将你的位置移动到连接中并更改为左连接

 SELECT
  Assets.ID
  ,Assets.Name
  ,Assets.Cost
  ,Assets.Prior Dep
  ,Assets.Prior Dep Period
  ,Assets.Use Prior
  ,DepreciationInfo.EndDate
  ,DepreciationInfo.CurrentDepreciation
  ,DepreciationInfo.AccumulatedDepreciation
  ,DepreciationInfo.CarryingValue
  ,DepreciationInfo.DepID
  ,DepreciationInfo.Monthly
FROM
  Assets
  left JOIN DepreciationInfo
    ON Assets.AssetID = DepreciationInfo.AssetID
       and DepreciationInfo.EndDate=@EndDate 
       and DepreciationInfo.Monthly=0

根据您的ON条件返回所有资产和折旧匹配。

你不能在where子句中保留连接对象,或者将左连接转换为内连接(因为消除了空值)。