我有一个运行良好的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下形成一个小计的一行
我尝试过“Group”,但得到了一个模糊的列名‘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发布于 2011-12-19 17:59:35
如果您收到关于一个模糊名称的警告,这是因为您提到了多个表中的一个列,而数据库不知道您指的是哪个表。
尽管如此,根据您所拥有的数据库引擎(SQLServer、MySQL、Oracle),有些有一个用于聚合的"concat“函数。
发布于 2011-12-19 18:06:01
如果你想列出一份包含所有项目的合同,你必须按照你已经做好的方式去做。结果如下:
contract1 project1
contract1 project2不能使用聚合来获取
contract1
project1
project2话虽如此,你的不明确错误是因为你需要写
GROUP BY PA01201.PACONTNUMBER而不是
GROUP BY PACONTNUMBER它仍然会抱怨所有其他列都不属于聚合函数(例如MAX、COUNT、AVG、Min.min)。
发布于 2011-12-20 12:17:14
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是一个数字字段,因为您的示例正在对其进行数学计算。
不能将add0 PA01100.PACONTNUMBER返回到select或group,因为它将创建要避免的单独行;除非使用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 STATIONhttps://stackoverflow.com/questions/8565362
复制相似问题