如何在不在GroupBy子句中时选择字段

时间:2017-03-04 21:13:16

标签: sql-server tsql group-by aggregate-functions

我不想按" BimeName.IssueDate "进行分组。这个选择中的字段,我不知道该怎么做。 如果我没有在GroupBy子句中指定此字段,我将收到错误。

  

Msg 8120,Level 16,State 1,Line 2 Column' BimeName.IssueDate'是   在选择列表中无效,因为它不包含在任何一个中   聚合函数或GROUP BY子句。

请帮助我!

SELECT
        BimeName.IssueDate,
        sum(BimeName.Premium) as Permium,
        TypeOfInsurances.TypeOfInsurance + ' ' +
        InsuranceKinds.KindOfInsurance as KindOfInsurance,
        InsuranceAgents.NameOfInsurance,
        InsuranceAgents.Representation + ' ' +
        InsuranceAgents.AgentCode as Agent
from    
        BimeName
        Inner Join InsuranceKinds ON InsuranceKinds.Id = BimeName.KindOfInsuranceId
        Inner Join TypeOfInsurances ON TypeOfInsurances.Id = InsuranceKinds.TypeOfInsuranceId
        Inner Join InsuranceAgents ON InsuranceAgents.Id = TypeOfInsurances.InsuranceAgentId
where   
        BimeName.IssueDate BETWEEN '2010-01-01' AND '2017-01-30'
group by InsuranceAgents.Representation, InsuranceAgents.NameOfInsurance, InsuranceAgents.AgentCode  , BimeName.IssueDate  , TypeOfInsurances.TypeOfInsurance , InsuranceKinds.KindOfInsurance

2 个答案:

答案 0 :(得分:1)

如果您像上面说的那样,不需要它,只需从选择中省略日期字段。

SELECT
        sum(BimeName.Premium) as Permium,
        TypeOfInsurances.TypeOfInsurance + ' ' +
        InsuranceKinds.KindOfInsurance as KindOfInsurance,
        InsuranceAgents.NameOfInsurance,
        InsuranceAgents.Representation + ' ' +
        InsuranceAgents.AgentCode as Agent
from    
        BimeName
        Inner Join InsuranceKinds ON InsuranceKinds.Id = BimeName.KindOfInsuranceId
        Inner Join TypeOfInsurances ON TypeOfInsurances.Id = InsuranceKinds.TypeOfInsuranceId
        Inner Join InsuranceAgents ON InsuranceAgents.Id = TypeOfInsurances.InsuranceAgentId
where   
        BimeName.IssueDate BETWEEN '2010-01-01' AND '2017-01-30'
group by 
        InsuranceAgents.Representation, 
        InsuranceAgents.NameOfInsurance, 
        InsuranceAgents.AgentCode, 
        TypeOfInsurances.TypeOfInsurance, 
        InsuranceKinds.KindOfInsurance

您可以在where子句中包含不在分组中的字段。

答案 1 :(得分:0)

没有任何意义。想象一下,它在同一组中的字段 BimeName.IssueDate 具有不同的值,那么必须为该类别选择哪个值?应该再考虑一下。