2011-12-19 103 views
0

我有一个SQL查询运行良好,但它返回2个不同的表中包含合同细分和属于他们的项目的结果。SQL分组查询

的一个例子是:合同号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

什么是数据库引擎?在Oracle中,WM_Concat或ListAgg,MySQL使用Group_concat,MS:SQL具有它自己的风格:在堆栈中进行搜索,在WM_Concat或Group_Concat上进行数据库引擎搜索 – xQbert 2011-12-19 18:02:11

+0

只需使用order by即可。按PA01201.PACONTNUMBE,PA01201PAPROJNUMBER命令。 (根据答案中提供的其他信息) – xQbert 2011-12-20 11:17:07

+0

我试过这个,但随着其他信息被拉过来的是财务数字,它仍然给出了12004,12004D,12004F而不是12004的一条线,它包含了所有各种12004。 – user1086159 2011-12-20 11:50:04

回答

0

如果您收到有关不明确名称的警告,这是因为您提到了位于多个表中的列,并且数据库不知道您的意思。这就是说,取决于你拥有的数据库引擎(SQLServer,MySQL,Oracle),有些人有一个用于聚合的“concat”功能。

0

如果你想列出所有项目的合同,你必须按照你已经这样做的方式来完成。结果会是这样的:

contract1 project1 
contract1 project2 

你不能用骨料获得

contract1 
      project1 
      project2 

这样说,你暧昧的错误是因为你需要写

GROUP BY PA01201.PACONTNUMBER 

和不是

GROUP BY PACONTNUMBER 

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

+0

感谢您的帮助。我会继续尝试不同的事情。 – user1086159 2011-12-20 10:41:15

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是一个数字字段,因为您的示例正在对它进行数学运算。

您不能将PA01100.PACONTNUMBER添加回select或group by,因为它会创建您试图避免的单独行;除非你使用wm_Concat或类似功能基于预期结果和意见都不同项目aggregrage到同一行/列

UPDATE:

12004 25000 SS Bus Station 
12005 xxxxx xxxxxx 

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

OR是这些结果还行吗?

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

我只是试着运行这段代码,并得到这个错误....'操作数数据类型字符是无效的运算符'??? – user1086159 2011-12-20 12:22:45

+0

这意味着我的假设是错误的。 Paprojnumber不是数字。你需要先把它转换成数字来做数学运算。你使用的是什么数据库引擎?这将告诉我我需要更新的语法将paprojnumber转换为数字。假设mySQL – xQbert 2011-12-20 12:25:23

+0

我正在使用SQL 2005 – user1086159 2011-12-20 12:30:05