SQL分组查询不起作用
我有两个非常相似的查询,一个有效,另一个不断给我一个关于GROUPBY子句中不包含项的错误,即使它是。除了1个字段外,这两个查询“几乎”相同。我已经上下比较了这两种方法,无法找出第二种方法不起作用的原因 这个很好用:SQL分组查询不起作用,sql,sql-server,sql-server-2008,tsql,group-by,Sql,Sql Server,Sql Server 2008,Tsql,Group By,我有两个非常相似的查询,一个有效,另一个不断给我一个关于GROUPBY子句中不包含项的错误,即使它是。除了1个字段外,这两个查询“几乎”相同。我已经上下比较了这两种方法,无法找出第二种方法不起作用的原因 这个很好用: SELECT o.Org+'-'+o.OrgSUB as 'orgsub',o.PSO,count(g.id) as caseNo, grouping(o.Org+'-'+o.OrgSUB ) AS ORGSUBTOTAL, grouping(o.PSO) AS PSOTOTAL
SELECT o.Org+'-'+o.OrgSUB as 'orgsub',o.PSO,count(g.id) as caseNo,
grouping(o.Org+'-'+o.OrgSUB ) AS ORGSUBTOTAL, grouping(o.PSO) AS PSOTOTAL
from g,o
where g.ORG+'-'+g.ORGSUB = o.ORG+'-'+o.ORGSUB and o.active='y' and
GROUP BY o.Org+'-'+o.OrgSUB ,o.PSO
WITH ROLLUP ORDER BY o.Org+'-'+o.OrgSUB desc, o.PSO desc, ORGSUBTOTAL , PSOTOTAL
现在,如果我替换PSO和ORG(这样结果按ORG显示,然后按ORG和orgsub组合显示),我会得到以下错误:
列“o.orgsub”在select列表中无效,因为它未包含在聚合函数或GROUP BY子句中
SELECT o.Org+'-'+o.OrgSUB as 'orgsub',o.org,count(g.id) as caseNo,
grouping(o.Org+'-'+o.OrgSUB ) AS ORGSUBTOTAL, grouping(o.org) AS orgTOTAL
from g,o
where g.ORG+'-'+g.ORGSUB = o.ORG+'-'+o.ORGSUB and o.active='y' and
GROUP BY o.Org+'-'+o.OrgSUB ,o.Org
WITH ROLLUP ORDER BY o.Org+'-'+o.OrgSUB desc, o.Org desc, ORGSUBTOTAL , OrgTOTAL
如果我将
groupbyo.Org+'-'+o.OrgSUB,o.Org
更改为groupbyo.Org+'-'+o.OrgSUB,o.Org,o.OrgSUB
,错误会消失,但我被困在一个额外的行中,我不需要看到。我没有做太多更改。我会这样做:
SELECT o.Org+'-'+o.OrgSUB as orgsub
, o.PSO
, count(g.id) as caseNo
, grouping(o.Org+'-'+o.OrgSUB ) AS ORGSUBTOTAL
, grouping(o.PSO) AS PSOTOTAL
FROM g JOIN o
ON (g.ORG = o.ORG)
AND (g.ORGSUB = o.ORGSUB)
WHERE o.active='y'
GROUP BY orgsub, o.PSO
WITH ROLLUP
ORDER BY orgsub desc, o.PSO desc, ORGSUBTOTAL , PSOTOTAL
我不知道你为什么这样做:
o.Org+'-'+o.OrgSUB作为“OrgSUB”
我把它改成了o.Org+'-'+o.OrgSUB作为OrgSUB
。我想测试一下,但我希望它能起作用。我猜,它会因为o.Org在你的小组中反复出现而生气。为了简化事情(并使它更容易阅读),能否创建一个视图:
CREATE VIEW orgSubView AS
SELECT o.Org+'-'+o.OrgSUB as orgsub, o.org as org, o.PSO as pso, g.id as caseNo
FROM g,o
WHERE g.ORG+'-'+g.ORGSUB = o.ORG+'-'+o.ORGSUB and o.active='y'
(或将此查询拉入一个新表…)然后针对以下内容运行分组查询:
SELECT orgsub, pso ,count(caseNo)
FROM orgSubView
GROUP BY orgsub ,pso
或
然后添加额外的位(汇总和分组),如果可行的话。o.PSO有效我将您的查询更改为org和orgsub组合,但不起作用:(
GROUP BY orgsub, org