Crystal reports crystal report分层分组选项(如果零件重复)

Crystal reports crystal report分层分组选项(如果零件重复),crystal-reports,Crystal Reports,我遇到一个关于crystal report的问题:如何分组 我有一张名为Part的表 Part_ID Parent_Part_ID B A c A A NULL C B D B E C F C A是顶部零件,B、C、D不仅是子零件,而且是父零件,E、F是最低的子零

我遇到一个关于crystal report的问题:如何分组

我有一张名为Part的表

   Part_ID   Parent_Part_ID
    B             A
    c             A
    A             NULL
    C             B
    D             B
    E             C
    F             C
A是顶部零件,B、C、D不仅是子零件,而且是父零件,E、F是最低的子零件

现在,我需要用水平从一部分到另一部分显示,如下所示

如何在Crystal report中显示此格式的数据

我尝试使用
分层分组选项
,但结果不是我想要的

我需要的结果是:

 A 
   B
     C   (shold be show even the part have two parent part)
      E
      F
    D
  C
    E
    F
解决了的! 尝试使用菜单语音调用
分层分组选项
,并指定将每条记录链接到其父记录的字段

结果应该与此类似:

A
  B
    C
      E
      F
    D
  C
    E
    F
但Crystal Reports层次结构只对每条记录执行一次操作,并且不关心同一元素是否应位于两个父项下。

因此,我做了一个查询hack,使用基于父项的同一个表上的联接直接在数据中创建层次结构

DECLARE @t TABLE (Part_ID varchar(1), Parent_Part_ID varchar(1) );
insert into @t 
SELECT 'B' , 'A'  
UNION   SELECT 'C'   ,   'A' 
UNION   SELECT 'A'   ,  NULL 
UNION   SELECT 'C'   ,   'B' 
UNION   SELECT 'D'  ,    'B' 
UNION   SELECT 'E'    ,  'C' 
UNION   SELECT 'F'    ,  'C' 

SELECT 
 t1.Part_ID as t1, 
 t2.Part_ID as t2, 
 t3.Part_ID as t3, 
 t4.Part_ID as t4
FROM @t t1 
  LEFT JOIN @t t2 on t1.Part_ID = t2.Parent_Part_ID
  LEFT JOIN @t t3 on t2.Part_ID = t3.Parent_Part_ID
  LEFT JOIN @t t4 on t3.Part_ID = t4.Parent_Part_ID
WHERE t1.Parent_Part_ID is null
并且删除了分层分组选项,只在t1、t2、t3上创建了3个组使用每个组的标题,并使用t4的详细信息

结果是,根据需要

A
 B
  C
   E
   F
  D
 C
  E
  F

如果有人需要它。

jack,你试过我的解决方案吗?我试过你的解决方案,但仍然有一个问题,它不能告诉C,在新的解决方案中,家长的角色在哪里。。问题解决了!你的解决方案很好,但有限,对我的问题来说,水平是动态和不确定的,谢谢我尝试你的解决方案,但结果不是我想要的,你说得对@jack.li结果看起来像你写的,而不是我写的。Crystal Reports只获取每条记录一次,并将其附加到找到的第一个父项。感谢您的解决方案。无法完成此功能?您的解决方案很好,但有限,我的问题是,级别是动态和不确定的,Thanks@jack.li您可以使用多个联接(20?50?)进行查询,以满足数据的任何可能要求。您必须在报告中创建相同数量的组。隐藏空部分报告将适应真实数据。这是一个解决方法,但可以解决您的问题。