我正在使用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中。
我尝试了所有外连接并且结果相同,它显示了具有内部和外部连接的记录数。
任何帮助都将不胜感激。
答案 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子句中保留连接对象,或者将左连接转换为内连接(因为消除了空值)。