【发布时间】:2016-08-25 14:54:41
【问题描述】:
我正在从表 ProductionReportMetrics 中检索数据,其中我有列 NetRate_QuoteID。然后到那个结果集我需要得到Description 列。
为了获得Description 列,我需要加入 3 个表:
- NetRate_Quote_Insur_Quote
- NetRate_Quote_Insur_Quote_Locat
- NetRate_Quote_Insur_Quote_Locat_Liabi
但在那之后,我的保费就完全关闭了。
我在这里做错了什么?
SELECT QLL.Description,
QLL.ClassCode,
prm.NetRate_QuoteID,
QL.LocationID,
ISNULL(SUM(premium),0) AS NetWrittenPremium,
MONTH(prm.EffectiveDate) AS EffMonth
FROM ProductionReportMetrics prm
LEFT JOIN NetRate_Quote_Insur_Quote Q
ON prm.NetRate_QuoteID = Q.QuoteID
INNER JOIN NetRate_Quote_Insur_Quote_Locat QL
ON Q.QuoteID = QL.QuoteID
INNER JOIN NetRate_Quote_Insur_Quote_Locat_Liabi QLL
ON QL.LocationID = QLL.LocationID
WHERE YEAR(prm.EffectiveDate) = 2016 AND
CompanyLine = 'Ironshore Insurance Company'
GROUP BY MONTH(prm.EffectiveDate),
QLL.Description,
QLL.ClassCode,
prm.NetRate_QuoteID,
QL.LocationID
我在这个查询中遗漏了什么?
select
ClassCode,
QLL.Description,
sum(Premium)
from ProductionReportMetrics prm
LEFT JOIN NetRate_Quote_Insur_Quote Q ON prm.NetRate_QuoteID = Q.QuoteID
LEFT JOIN NetRate_Quote_Insur_Quote_Locat QL ON Q.QuoteID = QL.QuoteID
LEFT JOIN
(SELECT * FROM NetRate_Quote_Insur_Quote_Locat_Liabi nqI
JOIN ( SELECT LocationID, MAX(ClassCode)
FROM NetRate_Quote_Insur_Quote_Locat_Liabi GROUP BY LocationID ) nqA
ON nqA.LocationID = nqI.LocationID ) QLL ON QLL.LocationID = QL.LocationID
where Year(prm.EffectiveDate) = 2016 AND CompanyLine = 'Ironshore Insurance Company'
GROUP BY Q.QuoteID,QL.QuoteID,QL.LocationID
现在它说
Msg 8156, Level 16, State 1, Line 14
The column 'LocationID' was specified multiple times for 'QLL'.
【问题讨论】:
-
几个问题:为什么在第一次连接时使用了左连接?您的列 premium、CompanyLine 属于哪些表?
-
在此示例结果集中,任何地方都没有重复项。例如,如果您希望只有一条记录为
Contractors - Executive Supervisors, 91580+,那么您将不得不以某种方式聚合这些记录中的其他列(例如,使用平均值、最大值、最小值等)。 -
我使用 LEFT JOIN 是因为我想保留 ProductionReportMetrics 表中的结果,然后,我想在该结果中添加 ClassCode Description 列。因此,根据 LEFT JOIN 规则,它保留左表中的所有记录并连接右表中的记录。 Premium 和 CompanyLine 列属于 ProductionReportMetrics 表。我也尝试使用 INNER JOIN,但结果相同。
-
蒂姆,你是说没有重复,因为 NetRate_QuoteID 列是唯一的吗?如果我只是检索
SUM(Premium) from ProductionReportMetrics,我得到了 11,000,000 美元。但是在我完成这些加入之后,我的保费要高得多。我不明白为什么 -
你的表之间的连接是什么关系?他们都是一对一的吗?如果这些连接中的任何一个是一对多的,那么您可能会在那里创建一个副本。
标签: sql-server tsql join reporting-services