2013-10-14 54 views
-3

我編輯了SQL來使用DISTINCT,但是我仍然獲取與使用GROUP BY時相同的數據。有什麼建議麼? 當我使用GROUP BY時,它要求包含select子句中的所有字段,誰能告訴我爲什麼是這樣?連續不同的錯誤

任何幫助,非常感謝。

SELECT DISTINCT 
TrnClaim.ClientID 
, TrnClaim.FileNo 
, TrnLegend.RecordNo 
, RTRIM(dbo.TrnClient.ClientName + ' ' + ISNULL(dbo.TrnClient.Initials,'') + ' ' +  (CASE WHEN dbo.TrnClient.LanguageCode = 'A' THEN ISNULL(dbo.TrnClient.Title, 'Mr') ELSE ISNULL(dbo.TrnClient.Title,'')END)) AS NameInitials 
, TrnClient.IDNumber 
, ISNULL(dbo.MstInsurer.InsurerName, 'Unknown') AS InsurerName 
, CAST(dbo.TrnPolicy.AgentID AS VARCHAR(10)) + ' ' + ISNULL(CAST(dbo.MstAgent.AgentName AS VARCHAR(50)),'Unknown') AS AgentIDName 
, CAST(dbo.TrnPolicy.TeamID AS VARCHAR(10)) + ' ' + ISNULL(dbo.VieTeamSelect.TeamName, 'Unknown') AS TeamIDName 
, CAST(dbo.TrnPolicy.LinkID AS VARCHAR(10)) + ' ' + ISNULL(dbo.MstLink.LinkName, 'Unknown') AS LinkIDName 
, CAST(dbo.TrnPolicy.SubagentID AS VARCHAR(10)) + ' ' + ISNULL(dbo.MstSubagent.SubagentName, 'Unknown') AS SubagentIDName 
, CAST(dbo.TrnPolicy.MarketerID AS VARCHAR(10)) + ' ' + ISNULL(dbo.MstMarketerCodes.MarketerName, 'Unknown') AS MarketerIDName 
, dbo.TrnRisk.RiskID 
, dbo.TrnRisk.Registration 
, dbo.TrnRisk.VehID 
, dbo.TrnRisk.VinNo 
, dbo.TrnRisk.VehMake 
, dbo.TrnRisk.VehMake 
, dbo.TrnRisk.VehModel 
, dbo.TrnRisk.VehModel 
, dbo.TrnExt.ExtStartDate 
, dbo.TrnExt.ExtEndDate 
, dbo.MstRateCodes.RateCodeID 
, dbo.TrnExt.ExtDesc 
, dbo.TrnPolicy.Status AS PolicyStatus 
, dbo.TrnPolicy.PayMeth 
, dbo.TrnPolicy.PolicyPeriod 
, 1 AS [Count] 
, dbo.TrnPolicy.TotalPrem AS LastMonthPremium 
--, LastPolicy.TotalDue AS LastMonthTotalDue 
, dbo.TrnPolicy.TeamID 
, dbo.TrnPolicy.AgentID 
, dbo.TrnPolicy.LinkID 
, ISNULL(dbo.TrnPolicy.LeadInsurerID,MstInsurer.InsurerID) AS InsurerIDForFilter 
, dbo.TrnLegend.LegendDescr 
, dbo.TrnLegend.ActiveDate 

FROM dbo.TrnClaim 

INNER JOIN dbo.TrnPolicy ON 
    TrnClaim.ClientID = dbo.TrnPolicy.ClientID 
    AND 
    TrnClaim.FileNo = dbo.TrnPolicy.FileNo 

INNER JOIN dbo.TrnClient ON 
    dbo.TrnPolicy.ClientID = dbo.TrnClient.ClientID 

INNER JOIN dbo.TrnRisk ON 
    dbo.TrnPolicy.ClientID = dbo.TrnRisk.ClientID 
    AND 
    dbo.TrnPolicy.FileNo = dbo.TrnRisk.FileNo 

INNER JOIN dbo.TrnExt ON 
    dbo.TrnRisk.ClientID = dbo.TrnExt.ClientID 
    AND 
    dbo.TrnRisk.FileNo = dbo.TrnExt.FileNo 

LEFT OUTER JOIN dbo.MstRateCodes ON 
    dbo.MstRateCodes.RateCodeID = dbo.TrnExt.ExtCode  

LEFT OUTER JOIN dbo.MstInsurer MstInsurerLead ON 
    dbo.TrnPolicy.LeadInsurerID = MstInsurerLead.InsurerID 

LEFT OUTER JOIN dbo.TrnPolicy LastPolicy ON 
    dbo.TrnPolicy.ClientID = LastPolicy.ClientID 
    AND 
    dbo.TrnPolicy.FileNo = LastPolicy.FileNo 

LEFT OUTER JOIN dbo.MstAgent ON 
    dbo.TrnPolicy.AgentID = dbo.MstAgent.AgentID 

LEFT OUTER JOIN dbo.MstSubagent ON 
    dbo.TrnPolicy.SubagentID = dbo.MstSubagent.SubagentID 

LEFT OUTER JOIN dbo.MstMarketerCodes ON 
    dbo.TrnPolicy.MarketerID = dbo.MstMarketerCodes.MarketerID 

LEFT OUTER JOIN dbo.VieTeamSelect ON 
    dbo.TrnPolicy.TeamID = dbo.VieTeamSelect.TeamID 

LEFT OUTER JOIN dbo.MstLink ON 
    dbo.TrnPolicy.LinkID = dbo.MstLink.LinkID 

LEFT OUTER JOIN dbo.MstInsurer ON 
    dbo.MstInsurer.InsurerID= dbo.TrnClaim.InsurerID 

INNER JOIN dbo.TrnLegend On 
    dbo.TrnLegend.ClientID = dbo.TrnClaim.ClientID 
    AND 
    dbo.TrnLegend.FileNo = dbo.TrnClaim.FileNo 


WHERE 
Upper(dbo.TrnLegend.LegendDescr) LIKE '%CANCELLED%' 

Order By 
dbo.TrnClaim.ClientID 
, dbo.TrnClaim.FileNo 
, dbo.TrnLegendRecordNo 
+2

粘貼到確切的錯誤,所以我們知道它是抱怨哪些列 – DevelopmentIsMyPassion

+1

嗯......你已經傾倒了一個大的SQL語句,並說你得到「錯誤」。您尚未發佈您想要實現的目標或錯誤信息。人怎麼可能有幫助?分解它。刪除大部分聲明並嘗試構建它。與互聯網上的隨機人爲你猜測相比,你會更容易發現問題所在。 – Ben

+0

'如果所有3個WHERE子句都處於活動狀態,它將運行但不返回任何數據'OK!有趣!但你對結果有什麼期望? – DrCopyPaste

回答

0

使用Group By時,指定屬性列表。包含GROUP BY子句的查詢根據屬於分組集的屬性值的每個唯一組合生成每行一行。因此,在查詢中指定GROUP BY時,所有後續步驟(HAVING,SELECT等)都只能指定每個組具有標量(單數)值的表達式。這些表達式可以包含GROUP BY列表中的列或表達式,如TrnClaim.ClientID - 或聚合函數,如COUNT(TrnClaim.ClientID)。

正如我所看到的,您在上面的查詢中沒有包含任何聚合函數,這就是爲什麼當您編寫說Group By(TrnClaim.ClientID)或任何其他列時,則不會創建任何組或將每行更改爲獨特組因此它要求包含select子句中的所有字段。

這就是爲什麼您使用Distinct和GROUP BY獲取相同數據的原因,因爲沒有創建組。