GROUP BY混乱

时间:2012-06-19 12:02:32

标签: group-by sql-server-2008-r2

我正在浏览SQL Server中的一些数据,我想GROUP BY我的结果,但无法让它工作。

这是我当前的SQL语句:

SELECT
   PA01201.CUSTNMBR, 
   PA01201.PACONTNUMBER, 
   PA01201.PAcontid, 
   PA01100.CUSTNMBR AS Expr1, 
   PA01100.PAcontname, 
   PA01100.PAcontid AS Expr2, 
   PA01100.PACONTNUMBER AS Expr3, 
   PA01201.PAprojname, 
   PA01201.PAPROJNUMBER
   PA01201.Cost

FROM        
   PA01201 
INNER JOIN
   PA01100 ON PA01201.CUSTNMBR = PA01100.CUSTNMBR AND 
              PA01201.PACONTNUMBER = PA01100.PACONTNUMBER AND 
              PA01201.PAcontid = PA01100.PAcontid 

它会返回以下结果:

CUSTNMBR    PACONTNUMBER    PAcontid    Expr1   Pacontname  Expr2   Expr3   Paprojname  PAPROJNUMBER    Cost
AD001           8051    8051    AD001           Company 1   8051    8051    Project 1   08051P          951
AP001           8063    8063    AP001           Company 2   8063    8063    Project 2   08063P          2651
AR002           8096    8096    AR002           Company 3   8096    8096    Project 3   08096P          807
AR003           9033    9033    AR003           Company 4   9033    9033    Project 4   09033P          458
AS001           8013    8013    AS001           Company 5   8013    8013    Project 5   08013C          3297
AS001           8013    8013    AS001           Company 5   8013    8013    Project 5   08013P          48
AS001           8013    8013    AS001           Company 5   8013    8013    Project 5   08013P          641
AR002           8096    8096    AR002           Company 3   8096    8096    Project 3   08096P          1000

我希望能够按PAcontid对结果进行分组。

有人可以建议最简单的方法吗?

当我尝试插入GROUP BY子句时,我收到一条错误,指出其他列(CUSTNMBR,PAPROJNUMBER)等未包含在子句中????

任何帮助都非常感激。

所有工作都在SQL Server Management Studio 2008 R2中完成


很抱歉由于某些原因,我的上一栏(费用)没有结果。我已经更新了我的问题以显示正确的字段。基本上我要做的就是为每个Pacontid获得总费用。

我希望我的结果看起来像........

CUSTNMBR    PACONTNUMBER    PAcontid    Expr1   Pacontname  Expr2   Expr3   Paprojname  PAPROJNUMBER    Cost
    AS001           8013    8013    AS001           Company 5   8013    8013    Project 5   08013P          3986
    AD001           8051    8051    AD001           Company 1   8051    8051    Project 1   08051P          951
    AP001           8063    8063    AP001           Company 2   8063    8063    Project 2   08063P          2651
    AR002           8096    8096    AR002           Company 3   8096    8096    Project 3   08096P          1807
    AR003           9033    9033    AR003           Company 4   9033    9033    Project 4   09033P          458

这可能是我想要做的吗?

3 个答案:

答案 0 :(得分:1)

使用GROUP BY时,所有选定的列都必须位于GROUP BY子句中,否则必须位于aggregate子句中(例如:SUM,{{1}围绕着它,MAXMIN)!

有关详情,请查看THIS


在您的情况下,可能的解决方案可能是:

AVG

答案 1 :(得分:1)

GROUP BY子句中添加所有选定的列。但首先从所需的列开始:PAcontid

SELECT
    PA01201.CUSTNMBR, 
    PA01201.PACONTNUMBER, 
    PA01201.PAcontid, 
    PA01100.CUSTNMBR AS Expr1, 
    PA01100.PAcontname, 
    PA01100.PAcontid AS Expr2, 
    PA01100.PACONTNUMBER AS Expr3, 
    PA01201.PAprojname, PA01201.PAPROJNUMBER
FROM
    PA01201 
INNER JOIN
    PA01100 ON PA01201.CUSTNMBR = PA01100.CUSTNMBR AND 
    PA01201.PACONTNUMBER = PA01100.PACONTNUMBER AND 
    PA01201.PAcontid = PA01100.PAcontid 
GROUP BY 
    PAcontid, CUSTNMBR, PACONTNUMBER, PAcontname, PAprojname, PAPROJNUMBER

答案 2 :(得分:1)

也许你的意思是通过视觉“分组”它们,但不是像S​​QL那样,如果你添加了

   Order by CUSTNMBR , PAcontid

它将为您提供左侧客户列表,然后是PAcontid组中的数据..

   Order by PAcontid ,CUSTNMBR 

将由PAcontid对其进行排序,然后将客户整理好。

通常你会说

ann apple 10
pete strawberry 3
Lucy strawberry 12

select fruit, sum(count) as total from lunch group by fruit

获取

apple 10
strawbery 15