2012-09-10 98 views
0
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.staff_engineers, 
     pmc.staff_clerical, 
     pmc.staff_peons, 
     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' 
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 
GROUP BY pmc.[month]; 

这个查询是给我的错误: -SQL查询抛出错误

,因为它不是在聚合函数或GROUP载列“TBL_PMC.pd_name_of_project”在选择列表中无效BY子句。

+1

您的查询是没有意义的。你想做什么? –

回答

0

您得到该错误的原因是,当您执行SUM()函数时,您必须按任何正在返回的列进行分组。

0

由于pmc.[month]是group by子句中列出的查询中唯一的组合,因此它是列名称中唯一可能出现的没有使用聚合函数的列名。很难说出你想要用你的查询来做什么,通过它的外观,分组可能不是这个方法。

0

,你必须使用聚合功能,如MIN(),MAX(),AVG()用于除PMC select语句中的所有列。[月],因为它是在group by操作中使用的列

您的查询应该是这样的:

select pmc.[month] as 'Month', 
max(pmc.pd_name_of_project) as 'Name of Project', 
max(tbl_div.name) AS 'Name of Advisory Services Division', 
max(TBL_PMC_UNIT.UNIT_NAME) AS 'Name of Unit', 
......... 
......... 
SUM(pmc.salary_allowance) as 'Salary Allowance' 
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 
GROUP by pmc.[month]; 
0

大量可以在其中都包含在GROUP BY或具有聚合函数的SELECT中使用的列的GROUP语句。 - 如错误消息所述。

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

所以删除该组一行,并改变你的总和是这样的:(PARTITION BY PMC [月])

SUM(pmc.salary_allowance)OVER