我有一个带有查询的报告,该查询曾经包含每个项目的客户端 ID。客户(老板)希望每条记录有多个客户。这很容易 - 用新表 ItemClients(item-id, client-id) 替换 client-id 字段并加入 item-id。
现在的问题是报告 - 当然,每次有客户时,每个项目都会重复,但我只想在报告中复制一份该项目 - 无论一个项目有多少客户。此外,还有按客户端过滤报告的功能,我可以在 MySql 中很好地执行此操作,并且在以前的单客户端版本中也可以正常工作。
我的解决方案是在查询中添加一个 group by item-id 子句(MySql 允许这样做)。问题是如何将 group by 子句添加到报告中。任何分组尝试都会被解释为报告分组,这是我不想要的。我试图将整个查询作为一个命令,它工作了一段时间,但现在整个报告爆炸了,我的网络服务器崩溃了。
任何见解都会有所帮助。谢谢。
(编辑)这是命令中的(混合)代码,GROUP BY 子句是我添加的,其余部分是从水晶的 show sql 命令中抓取并修改的。(顺便说一句,这是一个子报告)
SELECT `ITEM`.`Date`, `ITEM`.`Started`, `ITEM`.`Stopped`, `TERM`.`Terminal`, `ITEM`.`TonnesLoaded`, `ITEM`.`LoadID`,
`ITEM`.`TotalLoaded`, `ITEM`.`ToGo`, `ITEM`.`OrderId`,
`COM`.`Commodity`,
`berths1`.`Berth`,
`CQ`.`LotNo`, `CQ`.`CategoryID`,
`IC`.`ClientId`
FROM `berths` `berths1`
INNER JOIN `Items` `ITEM` ON `berths1`.`BerthID`=`ITEM`.`BerthID`
INNER JOIN `terminals` `TERM` ON `berths1`.`TerminalID`=`TERM`.`TerminalID`
INNER JOIN `Quantities` `CQ` ON `ITEM`.`ItemId`=`CQ`.`ItemId`
AND `ITEM`.`OrderId`=`CQ`.`OrderId`
INNER JOIN `commodities` `COM` ON `CQ`.`CommodityID`=`COM`.`CommodityID`
LEFT OUTER JOIN `ItemClients` `IC` ON `CQ`.`OrderId`=`IC`.`OrderId`
AND `CQ`.`ItemId`=`IC`.`ItemId`
WHERE `ITEM`.`OrderId`={?Pm-details.OrderId}
AND ( {?Pm-?Category}=0 AND {?Pm-?ClientId}=0 )
OR (
`CQ`.CategoryID>0
AND `CQ`.CategoryID = {?Pm-?Category}
AND ( {?Pm-?ClientId}=0 OR IC.ClientId = {?Pm-?ClientId} )
)
OR ( {?Pm-?ClientId}>0 AND IC.ClientId = {?Pm-?ClientId} AND {?Pm-?Category}=0 )
GROUP BY `ITEM`.`ItemId`
ORDER BY `ITEM`.`Date`, `ITEM`.`Started`, `ITEM`.`LoadID`