我正在浏览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
这可能是我想要做的吗?
答案 0 :(得分:1)
使用GROUP BY
时,所有选定的列都必须位于GROUP BY
子句中,否则必须位于aggregate
子句中(例如:SUM
,{{1}围绕着它,MAX
,MIN
)!
有关详情,请查看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)
也许你的意思是通过视觉“分组”它们,但不是像SQL那样,如果你添加了
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