重新提问,如何使用水晶报表的分支语句?

on_my_way20xx 2010-07-08 02:36:21
从数据库中查出如图的数据,该图显示的已经是查询结果了,SQL语句如下:

select ctrl_id,convert(varchar(20),lr.consume_dt,23) as con_date,sum(act_usedmoney) as total_money,count(act_usedmoney) as times,lr.shopTime from (select *, shopTime =
case when (substring(convert(varchar(20),consume_dt,120),12,2)>=2 and substring(convert(varchar(20),consume_dt,120),12,2) <=4) then 'weeHourMeal'
when (substring(convert(varchar(20),consume_dt,120),12,2)>=11 and substring(convert(varchar(20),consume_dt,120),12,2) <=14) then 'lunch'
when (substring(convert(varchar(20),consume_dt,120),12,2)>=17 and substring(convert(varchar(20),consume_dt,120),12,2) <=20) then 'supper'
else 'otherMeal' end
from location_records) as lr where 1=1 and act_usedmoney !=0
group by convert(varchar(20),lr.consume_dt,23),ctrl_id,shopTime order by ctrl_id,convert(varchar(20),lr.consume_dt,23)





想根据 shoptime列的值,(比如中午12点就是午餐,下午6点就是夜餐),在水晶报表每行上"夜餐","午餐","晚餐"其中一列显示值,其余两列显示0,
如图




求高人指点!
...全文
107 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
东莞寻香苑 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 babyt 的回复:]

阿林睡得够晚的啊。。
我昨天回这个的时候都快2点了。。熬着看球赛,结果看了半场实在熬不住就睡了。
[/Quote]
呵呵,差不多吧
晚上睡的晚了,中午就要睡觉,不然,下午没有精神
阿泰 2010-07-08
  • 打赏
  • 举报
回复
阿林睡得够晚的啊。。
我昨天回这个的时候都快2点了。。熬着看球赛,结果看了半场实在熬不住就睡了。
东莞寻香苑 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 babyt 的回复:]

引用 8 楼 on_my_way20xx 的回复:

咯,看来我表达不好.
数据库中以con_date为标准,一天的数据(可能有1-3行)放在水晶报表的一行中
日期 夜餐(人次/金额) 午餐(人次/金额) 晚餐(人次/金额)
09.10.24 10/20 15/30 ……
[/Quote]

昨天我都看这贴了,感觉阿泰方法很好,所以就没有回复,按那样处理,水晶报表只需显示(包括汇总)就可以了,不用那么麻烦
阿泰 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 csui2008 的回复:]

引用 11 楼 on_my_way20xx 的回复:

哇塞,楼上大哥的公式看的我头晕了


呵呵,其实满简单的(逻辑上),就是变量多了点,最后把变量提出来就和你实现详细资料区的字段功能上一样,只是放到了分组尾节

合计:直接按字段汇总就可以了
[/Quote]

东莞寻香苑 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 on_my_way20xx 的回复:]

哇塞,楼上大哥的公式看的我头晕了
[/Quote]

呵呵,其实满简单的(逻辑上),就是变量多了点,最后把变量提出来就和你实现详细资料区的字段功能上一样,只是放到了分组尾节

合计:直接按字段汇总就可以了





阿泰 2010-07-08
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 on_my_way20xx 的回复:]

咯,看来我表达不好.
数据库中以con_date为标准,一天的数据(可能有1-3行)放在水晶报表的一行中
日期 夜餐(人次/金额) 午餐(人次/金额) 晚餐(人次/金额)
09.10.24 10/20 15/30 30/60
我从数据库里查询的结果集,某……
[/Quote]

你用下我之前的语句,或者5楼的语句,都是能直接出你要的效果的
5楼的更直接一些,因为我之前是在你的语句的基础上的。
比用公式处理简单N倍。
东莞寻香苑 2010-07-08
  • 打赏
  • 举报
回复
详细资料区没有办法,一行显示多记录的字段,所以在详细资料区显示你的需求的可能性不大
(除非按http://topic.csdn.net/u/20100707/16/f910c27b-2162-4490-acc2-b07d1e91606d.html?46602
泰哥上次回复的帖子 或 本贴五楼的方法,先整理好,再填入报表)
on_my_way20xx 2010-07-08
  • 打赏
  • 举报
回复
哇塞,楼上大哥的公式看的我头晕了
东莞寻香苑 2010-07-08
  • 打赏
  • 举报
回复
这种不好实现,阿泰在你上一个贴中的方法好点
如果你真想在水晶报表里实现,我给你一个最笨的方法:
(1)先按日期分组,然后建立公式temp1:
whileprintingrecords;
shared numbervar weeHourMealTimes:=0;//
shared numbervar supperTimes:=0;
shared numbervar lunchTimes:=0;//午餐人数
shared numbervar weeHourMealMoney:=0;
shared numbervar supperMoney:=0;
shared numbervar lunchMoney:=0;
shared numbervar SumMoney:=0;//当日金额
shared numbervar SumTimes:=0;//当日消费总金额

把temp1放在在分组头节,初始化一些报表共享变量,抑制本节点(分组头节)的显示,suppress:true

(2)建立公式temp2,计算每个变量:
whileprintingrecords;
numbervar weeHourMealTimes;
numbervar supperTimes;
numbervar lunchTimes;
numbervar weeHourMealMoney;
numbervar supperMoney;
numbervar lunchMoney;
numbervar SumMoney;
numbervar SumTimes;
if {location_records.con_date} <> Previous ({location_records.con_date}) then
(
SumTimes:= 0;
SumMoney:= 0;
);

if {location_records.shipTime}="lunch" then
(
lunchTimes:={location_records.times};
lunchMoney:={location_records.total_money};
)
else if {location_records.shipTime}="supper" then
(
supperTimes:= {location_records.times};
supperMoney:={location_records.total_money};
)
else if {location_records.shipTime}="weeHourMeal" then
(
weeHourMealTimes:={location_records.times};
weeHourMealMoney:={location_records.total_money};
);
//如果真有这三种以外的餐次,又不想讲这样餐次,以下两句就需放入每个分支中
SumTimes:= SumTimes+{location_records.times};
SumMoney:= SumMoney+{location_records.total_money};

把temp2放入详细资料节,抑制本节点的显示,suppress:true
其中location_records为表名

(3)第三步,建立8个小式显示上两个公式的变量的值:
如:
公式lunchTimes: //显示午餐人数

whileprintingrecords;
numbervar lunchTimes;
lunchTimes

公式lunchMoney:

whileprintingrecords;
numbervar lunchMoney;
ToText(lunchMoney,2)//显示两位小数

公式SumMoney: //当日小计,总金额
whileprintingrecords;
numbervar SumMoney;
ToText(SumMoney,2);

//其它 的类似

最后把日期,和这些小公式拖到分组尾节就是你的要求了
on_my_way20xx 2010-07-08
  • 打赏
  • 举报
回复
我想在数据库中新建6个公式字段,来对应报表中
weeHourMeal_times,weeHourMeal_money --- 夜餐的次数和钱数
lunch_times,lunch_money ---- 午餐的次数和钱数
supper_times,supper_money ---- 晚餐的次数和钱数

其中午餐的次数 公式这样写的
if {DataTable1.shopTime} = "lunch" then
{DataTable1.times}
else
0

但是保存时提示: 选定公式的值必须为布尔值...
郁闷中...
on_my_way20xx 2010-07-08
  • 打赏
  • 举报
回复
咯,看来我表达不好.
数据库中以con_date为标准,一天的数据(可能有1-3行)放在水晶报表的一行中
日期 夜餐(人次/金额) 午餐(人次/金额) 晚餐(人次/金额)
09.10.24 10/20 15/30 30/60
我从数据库里查询的结果集,某一天可能只有 午餐,晚餐,夜餐的一种或多种,也就是说,如09.10.24 这天三餐都有数据,那么水晶报表对应09.10.24这行的三列(夜餐午餐晚餐)都有数据,如果09.10.25这天 只有夜餐,那么对应09.10.25的行就只有 夜餐这列有数据,如果09.10.26 午餐,晚餐有数据,那么对应行就只有晚餐列有数据...
阿泰 2010-07-08
  • 打赏
  • 举报
回复
我昨天也写了个类似的,貌似他不是要这种,呵呵。
-小蕾- 2010-07-08
  • 打赏
  • 举报
回复
水晶报表上有筛选字段的吧?要是不行还可以用公式来限定,当字段为"lunch"时怎样,否则怎么样。。。
试试看。
永生天地 2010-07-08
  • 打赏
  • 举报
回复

select
ctrl_id,
convert(varchar(10),consume_dt,23) as con_date,
sum(case when datepart(hh,consume_dt) between 2 and 4 then act_usedmoney else 0 end) as weeHourMeal_total_money,
sum(case when datepart(hh,consume_dt) between 2 and 4 then 1 else 0 end) as weeHourMeal_times,
sum(case when datepart(hh,consume_dt) between 11 and 14 then act_usedmoney else 0 end) as lunch_total_money,
sum(case when datepart(hh,consume_dt) between 11 and 14 then 1 else 0 end) as lunch_times,
sum(case when datepart(hh,consume_dt) between 17 and 20 then act_usedmoney else 0 end) as supper_total_money,
sum(case when datepart(hh,consume_dt) between 17 and 20 then 1 else 0 end) as supper_times
from location_records
group by ctrl_id,convert(varchar(10),consume_dt,23)
order by ctrl_id,convert(varchar(10),consume_dt,23)

试试看
永生天地 2010-07-08
  • 打赏
  • 举报
回复
直接通过行转列不就可以了吗
阿泰 2010-07-08
  • 打赏
  • 举报
回复
我没看错的话,你只是要显示午餐的数据,也就是shopTime ='lunch'这些数据?

那这样的话,不是只要

Select a.* from
(你现在的语句) as a

where a. shopTime ='lunch'

?
on_my_way20xx 2010-07-08
  • 打赏
  • 举报
回复
泰哥上贴的回答,实行起来比较麻烦,我是想把这些数据用水晶报表的方式来筛选并显示...

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧