按功能分组查询错误

时间:2012-09-10 09:59:29

标签: sql sql-server sql-server-2008

  

可能重复:
  Sql Query throwing error

我正在尝试查询根据分部检索记录并根据月份显示,我必须明智地总结工资津贴月份,并且还明确显示月份。

这是我尝试的查询: -

select  
    pmc.[month] as 'Month', 
    pmc.pd_name_of_project as 'Name of Project',
    tbl_div.name AS 'Name of Advisory Services Division',
    TBL_PMC_UNIT.UNIT_NAME AS 'Name of Unit',
    pmc.pd_project_type as 'Project Type',
    pmc.accepted_tender_cost as 'Accepted Tender Cost',
    pmc.work_order_date as 'Work Order Date',
    pmc.tender_period_months as 'Tender Period',
    pmc.project_completion_date as 'Project Completion Date',
    pmc.per_pmc_charges as '% Of PMC Charges',
    pmc.total_pmc_charges_scheme as 'Total PMC amount   of the Scheme',
    pmc.bill_amount_certified_upto_previous_month as 'Bill amount certified upto previous Month',     
    pmc.total_PMC_charges_upto_previous_month as 'Total PMC charges  upto previous Month',
    pmc.receipt_PMC_charges_upto_previous_month as 'Receipt of PMC Charges upto previous Month',
    pmc.balance_of_PMC_charges_upto_previous_month as 'Balance of PMC charges upto previous Month',
    pmc.bill_amount_certified_current_month as 'Bill amount certified During Current Month',
    pmc.PMC_charges_for_current_month as ' PMC charges  During Current Month',
    pmc.receipt_PMC_charges_current_month as 'Receipt of PMC Charges During Current Monthh',
    pmc.balance_of_PMC_charges_current_month as 'Balance of PMC charges During Current Month',
    SUM(pmc.salary_allowance) as 'Salary & Allowance Division'
FROM 
    TBL_PMC pmc 
        INNER JOIN TBL_DIV 
            ON TBL_DIV.ID = pmc.DIV_ID
        LEFT OUTER JOIN TBL_PMC_UNIT 
            ON TBL_PMC_UNIT.ID=pmc.UNIT_ID  
WHERE 
    pmc.div_id= 17 
    --and pmc.unit_id=@unit_id;
group by  
    pmc.[month]

我有以下错误: - 列'TBL_PMC.pd_name_of_project'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。 我不想在所有列上使用聚合函数....只需要几列我总结!!

4 个答案:

答案 0 :(得分:2)

你可能不想,但你必须这样做。或者将列放在GROUP BY部分中。就像之前的回答告诉你的那样

答案 1 :(得分:0)

使用GROUP语句,您可以使用GROUP {中包含的SELECT中的列或具有聚合函数。 - 正如错误信息所说。

在这种情况下,您可以尝试使用SUM...OVER (PARTITION BY ...)子句。检查MSDN

所以删除Group By行并改变你的总和:

SUM(pmc.salary_allowance) OVER(PARTITION BY pmc.[month])

答案 2 :(得分:0)

需要将字段放在GROUP BY中。您可以使用以下方法查询数据:

select  pmc1.[month] as 'Month', 
    pmc2.pd_name_of_project as 'Name of Project',
    tbl_div.name AS 'Name of Advisory Services Division',
    TBL_PMC_UNIT.UNIT_NAME AS 'Name of Unit',
    pmc2.pd_project_type as 'Project Type',
    pmc2.accepted_tender_cost as 'Accepted Tender Cost',
    pmc2.work_order_date as 'Work Order Date',
    pmc2.tender_period_months as 'Tender Period',
    pmc2.project_completion_date as 'Project Completion Date',
    pmc2.per_pmc_charges as '% Of PMC Charges',
    pmc2.total_pmc_charges_scheme as 'Total PMC amount   of the Scheme',
    pmc2.bill_amount_certified_upto_previous_month as 'Bill amount certified upto previous Month',     
    pmc2.total_PMC_charges_upto_previous_month as 'Total PMC charges  upto previous Month',
    pmc2.receipt_PMC_charges_upto_previous_month as 'Receipt of PMC Charges upto previous Month',
    pmc2.balance_of_PMC_charges_upto_previous_month as 'Balance of PMC charges upto previous Month',
    pmc2.bill_amount_certified_current_month as 'Bill amount certified During Current Month',
    pmc2.PMC_charges_for_current_month as ' PMC charges  During Current Month',
    pmc2.receipt_PMC_charges_current_month as 'Receipt of PMC Charges During Current Monthh',
    pmc2.balance_of_PMC_charges_current_month as 'Balance of PMC charges During Current Month',
    pmc1.salary_allowance as 'Salary & Allowance Division'
FROM
(
    SELECT [month] as 'Month',
        SUM(pmc.salary_allowance) salary_allowance
    FROM TBL_PMC
    GROUP BY [month]
) pmc1 
INNER JOIN TBL_PMC pmc2
    ON pmc1.[month] = pmc2.[month]
INNER JOIN TBL_DIV 
    ON TBL_DIV.ID = pmc2.DIV_ID
LEFT OUTER JOIN TBL_PMC_UNIT 
    ON TBL_PMC_UNIT.ID=pmc2.UNIT_ID  
WHERE pmc2.div_id= 17 
    --and pmc.unit_id=@unit_id;

这会将您的SUM()置于子查询中,然后您只会GROUP BY子查询中的几个字段,然后从TBL_PMC获取您想要的其余字段你再次JOIN表。

答案 3 :(得分:0)

尝试这样:

select a.*,b.[Salary & Allowance Division] from 
(select  
    pmc.[month] as 'Month', 
    pmc.pd_name_of_project as 'Name of Project',
    tbl_div.name AS 'Name of Advisory Services Division',
    TBL_PMC_UNIT.UNIT_NAME AS 'Name of Unit',
    pmc.pd_project_type as 'Project Type',
    pmc.accepted_tender_cost as 'Accepted Tender Cost',
    pmc.work_order_date as 'Work Order Date',
    pmc.tender_period_months as 'Tender Period',
    pmc.project_completion_date as 'Project Completion Date',
    pmc.per_pmc_charges as '% Of PMC Charges',
    pmc.total_pmc_charges_scheme as 'Total PMC amount   of the Scheme',
    pmc.bill_amount_certified_upto_previous_month as 'Bill amount certified upto previous Month',     
    pmc.total_PMC_charges_upto_previous_month as 'Total PMC charges  upto previous Month',
    pmc.receipt_PMC_charges_upto_previous_month as 'Receipt of PMC Charges upto previous Month',
    pmc.balance_of_PMC_charges_upto_previous_month as 'Balance of PMC charges upto previous Month',
    pmc.bill_amount_certified_current_month as 'Bill amount certified During Current Month',
    pmc.PMC_charges_for_current_month as ' PMC charges  During Current Month',
    pmc.receipt_PMC_charges_current_month as 'Receipt of PMC Charges During Current Monthh',
    pmc.balance_of_PMC_charges_current_month as 'Balance of PMC charges During Current Month'
FROM 
    TBL_PMC pmc 
        INNER JOIN TBL_DIV 
            ON TBL_DIV.ID = pmc.DIV_ID
        LEFT OUTER JOIN TBL_PMC_UNIT 
            ON TBL_PMC_UNIT.ID=pmc.UNIT_ID  
WHERE 
    pmc.div_id= 17 
    --and pmc.unit_id=@unit_id;
group by  
    pmc.[month]
) a left join 

(select  
       pmc.[month] as 'Month', 
       SUM(pmc.salary_allowance) as 'Salary & Allowance Division'
FROM 
    TBL_PMC pmc 
        INNER JOIN TBL_DIV 
            ON TBL_DIV.ID = pmc.DIV_ID
        LEFT OUTER JOIN TBL_PMC_UNIT 
            ON TBL_PMC_UNIT.ID=pmc.UNIT_ID  
WHERE 
    pmc.div_id= 17 
    --and pmc.unit_id=@unit_id;
group by  
    pmc.[month]) b

on a.month = b.month