SQL分组查询不起作用

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

我有两个非常相似的查询,一个有效,另一个不断给我一个关于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 
 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