我有一个运行正常的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
答案 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