将GROUP BY子句添加到crystal报表中

时间:2013-06-28 20:00:05

标签: crystal-reports

我有一个包含查询的报告,该查询过去包含每个项目的客户端ID。客户(老板)希望每条记录有多个客户。这很简单 - 用新表ItemClients(item-id,client-id)替换client-id字段并加入item-id。

问题现在是报告 - 当然每个项目都是重复的,每次有客户,但我只想报告项目的一个副本 - 无论一个项目有多少客户。此外,还可以通过客户端过滤报表,我可以在MySql中正常运行,并且在之前的单客户端版本中运行良好。

我的解决方案是在查询中添加group by id-clause子句(MySql允许这样)。问题是如何将group by子句添加到报表中。任何群组尝试都会被解释为报告分组,这是我不想要的。我试图将整个查询作为一个命令,它已经工作了一段时间,但现在整个报告都爆炸了,崩溃了我的网络服务器。

任何见解都会有所帮助。感谢。

(编辑) 这是命令中的(混合)代码,GROUP BY子句是由我添加的,其余的是从crystal的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`

0 个答案:

没有答案