好的,因此我的Crystal Reports数据源具有如下所示的行:

|--------+----------+---------+------------+-----------+-----------+---------|
| SiteNo | SiteName | SiteMgr | ContType   | ContName  | ContState | ContZip |
|--------+----------+---------+------------+-----------+-----------+---------|
| 1262   | S. Belt  | Joe B.  | Landlord   | Mike      | CA        | 90017   |
| 1262   | S. Belt  | Joe B.  | Architect  | Paul      | TX        | 77040   |
| 1262   | S. Belt  | Joe B.  | Contractor | Chris     | AZ        | 85016   |
|--------+----------+---------+------------+-----------+-----------+---------|


有数百个站点号(SiteNo),每个站点号都有三行...报表中的每个记录都需要这样格式化:

|------------+------------+------------+------------|
|    Site    |  Landlord  | Architect  | Contractor |
|------------+------------+------------+------------|
| 1262       | Mike       | Paul       | Chris      |
| S. Belt    | CA         | TX         | AZ         |
| Joe B.     | 90017      | 77040      | 85016      |
|------------+------------+------------+------------|


由于数据源的前三列(SiteNo,SiteName,SiteMgr)对于特定站点始终是相同的,因此报表按SiteNo分组。我已经弄清楚了这部分。我将其放在组页脚中。然后,根据联系人类型(ContType:房东,建筑师或承包商),我需要处理的部分是信息需要进入关联的列。

不确定执行此操作的最佳方法?任何帮助将不胜感激。

最佳答案

您可以通过使用Crystal公式来实现,但是我认为,如果修改SQL查询,将更容易理解和维护,如下所示:

select SiteNo,
       max(SiteName)     SiteName,
       max(SiteMgr)      SiteMgr,
       max(case ContType
               when 'Landlord' then ContName
               else NULL
           end)          LandlordContName,
       max(case ContType
               when 'Landlord' then ContState
               else NULL
           end)          LandlordContState,
       max(case ContType
               when 'Landlord' then ContZip
               else NULL
           end)          LandlordContZip,
       max(case ContType
               when 'Architect' then ContName
               else NULL
           end)          ArchitectContName,
       max(case ContType
               when 'Architect' then ContState
               else NULL
           end)          ArchitectContState,
       max(case ContType
               when 'Architect' then ContZip
               else NULL
           end)          ArchitectContZip,
       max(case ContType
               when 'Contractor' then ContName
               else NULL
           end)          ContractorContName,
       max(case ContType
               when 'Contractor' then ContState
               else NULL
           end)          ContractorContState,
       max(case ContType
               when 'Contractor' then ContZip
               else NULL
           end)          ContractorContZip
from Contacts
group by SiteNo


延长报告的详细信息部分,使其可以包含三行,然后放置:


第一行上的SiteNo,LandlordContName,ArchitectContName和ContractorContName;
第二行上的SiteName,LandlordContState,ArchitectContState和ContractorContState;
第三行上的SiteMgr,LandlordContZip,ArchitectContZip和ContractorContZip。

10-07 23:10