筛选水晶报表中的分组记录



我有一个问题,我不知道如何克服。我需要根据组中的字段在水晶报告中过滤我的组。不仅如此,我还需要它来根据同一组中该字段中是否有两个不同的值来过滤组。例如,假设我有一个委员会的议题和投票表。每个议题的每一票都有一个条目,包含议题名称和投票(赞成、反对或弃权)。我将按议题名称对表格进行分组,我想过滤分组,只显示赞成票和反对票(即无弃权票和非一致票)的议题。我该怎么做?

您输入分组顶层的数据需要预先聚合,以便显示哪些投票有多个不同的响应。无论你的后端数据源是什么,你都需要这样做

create table dbo.Issues (
IssueID int identity(1,1) not null ,
constraint pkc_Issues primary key clustered ( IssueID ) ,
IssueText varchar(1000) )
--Note - not putting anything unique on VoterName because there may be 2 Joe Blows in the voter population.
create table dbo.Voters (
VoterID int identity(1,1) not null ,
constraint pkc_Voters primary key clustered ( VoterID ) ,
VoterName varchar(512) not null ) )
create table dbo.Votes (
VoteID int identity(1,1) not null ,
constraint pkn_Votes primary key nonclustered ( VoteID ) ,
VoterID int not null ,
constraint fk_VoterID@Votes foreign key ( VoterID ) references dbo.Voters ( VoterID ) ,
IssueID int not null ,
constraint fk_IssueID@Votes foreign key ( IssueID ) references dbo.Issues ( IssueID ) ,
constraint uci_IssueID_VoterID@Votes unique clustered ( IssueID , VoterID ) ,
VoteResponse varchar(16) null )

我会使用多个步骤提取数据(但如果你认为这更容易理解,可以随意进行子查询):

select IssueID , Count(VoteResponse) as ResponseCount
into #hasMultiple from (select distinct IssueID , VoteResponse from Votes)

然后我会回到那里,向Crystal:提供信息

select dbo.Issues.IssueID ,
dbo.Issues.IssueText ,
cast(case when #hasMultiple.ResponseCount > 1 then 1 else 0 end as bit) as HasMultiple ,
dbo.Votes.VoteID ,
dbo.Votes.VoterID ,
dbo.Votes.VoteResponse ,
dbo.Voters.VoterName
from dbo.Issues
inner join dbo.Votes
on dbo.Issues.IssueID = dbo.Votes.IssueID
left join dbo.Voters
on dbo.Votes.VoterID = dbo.Voters.VoterID
left join #hasMultiple
on dbo.Issues.IssueID = #hasMultiple.IssueID