Sql 为什么在何处需要分组
我不是开发人员,但需要使这项工作之前,我可以得到一个开发人员的帮助。。。 我有以下几点:;这是可行的,但是我需要一个WHERE-into-select使其正确,它告诉我需要通过添加到组中。当我这样做时,它会“复制”结果 工作原理:Sql 为什么在何处需要分组,sql,sql-server,aggregate,Sql,Sql Server,Aggregate,我不是开发人员,但需要使这项工作之前,我可以得到一个开发人员的帮助。。。 我有以下几点:;这是可行的,但是我需要一个WHERE-into-select使其正确,它告诉我需要通过添加到组中。当我这样做时,它会“复制”结果 工作原理: Select ALTEXTCUSTREF ,(SELECT AVG(C.SALESPRICE*C.QTY)) AS Budget ,select SUM(B.LEDGERSALESAMOUNT) as Labour from SMMACTIVITI
Select ALTEXTCUSTREF
,(SELECT AVG(C.SALESPRICE*C.QTY)) AS Budget
,select SUM(B.LEDGERSALESAMOUNT) as Labour
from SMMACTIVITIES AS A
LEFT JOIN PROJEMPLTRANS AS B ON A.ACTIVITYNUMBER=B.ACTIVITYNUMBER
LEFT JOIN PROJFORECASTEMPL AS C ON A.ACTIVITYNUMBER=C.ACTIVITYNUMBER
WHERE A.ACTIVITYNUMBER LIKE '1234%'
group by A.ALTEXTCUSTREF, C.ACTIVITYNUMBER
但是我需要对B.LEDGERSALESAMOUNT设置一个条件,所以我做了以下操作
Select ALTEXTCUSTREF
,(SELECT AVG(C.SALESPRICE*C.QTY)) AS Budget
,(select SUM(B.LEDGERSALESAMOUNT) where B.CATEGORYID NOT LIKE 'P_%') as Labour
from SMMACTIVITIES AS A
LEFT JOIN PROJEMPLTRANS AS B ON A.ACTIVITYNUMBER=B.ACTIVITYNUMBER
LEFT JOIN PROJFORECASTEMPL AS C ON A.ACTIVITYNUMBER=C.ACTIVITYNUMBER
WHERE A.ACTIVITYNUMBER LIKE '1234%'
group by A.ALTEXTCUSTREF, C.ACTIVITYNUMBER
我得到了这个错误:
Msg 8120,第16级,状态1,第4行“PROJEMPLTRANS.CATEGORYID”列
在选择列表中无效,因为它不包含在
聚合函数或GROUPBY子句
但是如果我通过将B.CATEGORYID放入组中,我会得到ALTEXTCUSTREF拆分的行,这是不正确的
请帮忙。我被卡住了,时间不多了。编辑成OP的新意图
SELECT bg.altextcustref
,bg.activitynumber
,bg.budget
,lb.labour
FROM
(
SELECT altextcustref
,activitynumber
,AVG(c.salesprice * c.qty) AS budget
FROM smmactivities AS a
LEFT JOIN projforecastempl AS c
ON a.activitynumber = c.activitynumber
WHERE a.activitynumber LIKE '1234%'
GROUP BY a.altextcustref, c.activitynumber
) AS bg
INNER JOIN
(
SELECT altextcustref
,activitynumber
,SUM(b.ledgersalesamount) AS labour
FROM smmactivities AS a
LEFT JOIN projempltrans AS b
ON a.activitynumber = b.activitynumber
WHERE a.activitynumber LIKE '1234%'
AND b.categoryid NOT LIKE 'P_%'
GROUP BY a.altextcustref, c.activitynumber
) AS lb
ON bg.altextcustref = lb.altextcustref
AND bg.activitynumber = lb.activitynumber;
删除那些内部选择,只保留聚合函数,它们是不必要的,并从group by中删除c.ActivityNumber,,,您会显示错误,因为您的内部选择中有“where b.CategoryId不象'p_u%”,请切换到正在使用的dbms的CASE标记。(该查询是特定于产品的。)谢谢。但现在我的金额是应该的两倍。这就是我加入的方式吗?@Toold可能是因为你的
join
语句,你应该检查你的数据。尝试相同的查询,但使用SELECT*
和deletegroupby
子句,添加orderby a.altextcustref,c.activitynumber
要检查重复行,我会这样做,当我在SMMACTIVITIES.ACTIVITYNUMBER=C.ACTIVITYNUMBER上将JOIN PROJFORECASTEMPL添加为C时,值会加倍。我已经尝试过其他每一次加入,但都没有什么不同。如果有人没有任何线索?@Toold,这意味着您应该分别计算预算
和人工
(使用左JOIN projforecastempl表示预算
,projempltrans表示人工
),然后在a.altextcustref,c.activitynumber
上合并两个结果。试着用我编辑过的答案。