SQL分组查询

时间:2011-12-19 17:55:30

标签: sql

我有一个运行正常的SQL查询,但它返回2个不同表的结果,这些表包含合同细分和属于它们的项目。

这方面的一个例子是:合同号12004包含项目12004C,12004D,12004F

有没有办法可以让所有12004在12004横幅合约编号下组合在一起?

我的查询是为了获取当前信息:

SELECT     PA01201.PACONTNUMBER, PA01201.PAPROJNUMBER, PA01201.PAprojname, PA01100.PAcontname
FROM         PA01201 INNER JOIN
             PA01100 ON PA01201.PACONTNUMBER = PA01100.PACONTNUMBER

基本上我试图从PAPROJNUMBERS(C,D,F等)中获取所有数据,以便在PACONTNUMBER下形成一行小计

我尝试过“分组依据”但得到一个不明确的列名'PACONTNUMBER'???

任何帮助都非常感谢。


感谢您的帮助。非常感激。我会继续尝试不同的事情。

回应使用的聚合实际上并不是我想做的事情。

基本上在我的12004C,12004D,12004F等项目的例子中,我只想让它们全部包含在12004之下。所以它看起来像这样..............

合约数字说明: -

12004    25000  SS Bus Station
12005    xxxxx  xxxxxxxx
12006    xxxxx  xxxxxxxx
12007    xxxxx  xxxxxxxx
12008    xxxxx  xxxxxxxx

而不是它当下的样子: -

合约数字说明

12004     6000  SS Bus Station
12004C 8000     SS Bus Station
12004D 1000 SS Bus Station
12004F 10000    SS Bus Station
12005   xxxxx   xxxxxx

3 个答案:

答案 0 :(得分:0)

如果您收到有关模糊名称的警告,那是因为您提到了多个表中的列,并且数据库不知道您指的是哪个表。

话虽如此,根据您拥有的数据库引擎(SQLServer,MySQL,Oracle),有些具有聚合的“concat”功能。

答案 1 :(得分:0)

如果你想列出所有项目的合同,你必须按照你已经做过的方式去做。结果将如下所示:

contract1 project1
contract1 project2

你不能使用聚合来获取

contract1
           project1
           project2

话虽如此,你的不明确错误是因为你需要写

GROUP BY PA01201.PACONTNUMBER

而不是

GROUP BY PACONTNUMBER

它仍会抱怨所有其他列不在聚合函数中(例如MAX,COUNT,AVG,MIN ......)

答案 2 :(得分:0)

SELECT     min(PA01201.PACONTNUMBER) as minPAContNumber, 
           sum(cast(PA01201.PAPROJNUMBER as int)) as SUMPaProjNumber, 
               PA01201.PAprojname
FROM         PA01201 
INNER JOIN PA01100 
  ON PA01201.PACONTNUMBER = PA01100.PACONTNUMBER
GROUP BY PA01201.PAprojname

我假设paprojnumber是一个数字字段,因为你的例子是对它进行数学运算。

你不能将0 PA01100.PACONTNUMBER添加回选择或组,因为它会创建你想要避免的单独行;除非你使用wm_Concat或类似的函数将所有不同的项目聚合到同一行/列中

根据预期结果和评论进行更新:

12004   25000  SS Bus Station
12005   xxxxx   xxxxxx

是不可实现的,因为paprojnumber包含诸如0612AB之类的数据,这些数据不能被视为数字,因此当我们尝试将数据汇总到一行并将这些项目添加到一起时,DBengine无法将0612AB添加到其他结果中。

或者这些结果好吗?

12004  |8000, 6000, 1000, 10000  | SS BUS STATION
12005  |9000AB, 6000, 2000, 4000 | SS BUS STATION