Crystal reports 显示最新的水晶公式

Crystal reports 显示最新的水晶公式,crystal-reports,crystal-reports-2008,Crystal Reports,Crystal Reports 2008,表中有从workout1到workout7的训练列 我想创建用于检查最新训练(更高)的公式,并将其显示在crystal report中。例如,检查workout7是否有值,然后在任何其他训练列之前显示它,否则检查workout6,如果有值,则在其他列之前显示它,依此类推 但我认为if else陈述不是执行此项工作的正确选择。正确的方法是什么 任何帮助都将不胜感激 您可以从两方面都做,在sqlserver方面做得很好,可以获得更好的性能 对于sqlserver端,这是一个示例 create tab

表中有从workout1到workout7的训练列

我想创建用于检查最新训练(更高)的公式,并将其显示在crystal report中。例如,检查workout7是否有值,然后在任何其他训练列之前显示它,否则检查workout6,如果有值,则在其他列之前显示它,依此类推

但我认为if else陈述不是执行此项工作的正确选择。正确的方法是什么

任何帮助都将不胜感激


您可以从两方面都做,在sqlserver方面做得很好,可以获得更好的性能

对于sqlserver端,这是一个示例

create table tempworkout (dmv_workpatten varchar(50), dmv_workin1 varchar(50) , dmv_workout1 varchar(50)
, dmv_workin2 varchar(50) , dmv_workout2 varchar(50)
, dmv_workin3 varchar(50) , dmv_workout3 varchar(50)
, dmv_workin4 varchar(50) , dmv_workout4 varchar(50)
, dmv_workin5 varchar(50) , dmv_workout5 varchar(50)
, dmv_workin6 varchar(50) , dmv_workout6 varchar(50)
, dmv_workin7 varchar(50) , dmv_workout7 varchar(50))

insert into tempworkout values ('WP1', 1,2,3,4,5,6,7,8,9,10,11,12,13,14)
,('WP1', 2,3,4,5,6,7,8,9,10,11,12,13,14, 15)
,('WP1', 3,4,5,6,7,8,9,10,11,12,13,null,15,null)
,('WP1', 4,5,6,7,8,9,10,11,12,null,14,null,16,null)
,('WP1', 4,5,6,7,8,9,10,null,12,null,14,null,16,null)

select * from tempworkout

select COALESCE(dmv_workout7, COALESCE(dmv_workout6, COALESCE(dmv_workout5,COALESCE(dmv_workout4,COALESCE(dmv_workout3,COALESCE(dmv_workout2,dmv_workout1)))))),
* from tempworkout

insert into tempworkout values ('WP1', 1,null,3,null,5,null,7,null,9,null,11,null,13,null)

select COALESCE(dmv_workout7, COALESCE(dmv_workout6, COALESCE(dmv_workout5,COALESCE(dmv_workout4,COALESCE(dmv_workout3,COALESCE(dmv_workout2,dmv_workout1)))))),
* from tempworkout
drop table tempworkout
crystal report中的比较有问题。在crystal report端,您可以使用like:(检查语法)

如果不是IsNull({table1.id}),那么
(如果{table1.name}“a”,则
var1:=“你好”
其他的
var1:=“Hi”;)
其他的
var1:=“再见”;


如果该值不为空,则需要检查该值,如果该值不为空,则打印该值,否则继续检查降序方法中的步骤,只要找到该值,就打印它

if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout10}) then
{EB_Tam_DailyMv.dmv_workout10}

else  if NOT  ISNULL ({EB_Tam_DailyMv.dmv_workout9}) then
{EB_Tam_DailyMv.dmv_workout9}

else if  NOT ISNULL ({EB_Tam_DailyMv.dmv_workout8}) then 
{EB_Tam_DailyMv.dmv_workout8}

else if  NOT ISNULL ({EB_Tam_DailyMv.dmv_workout7}) then 
{EB_Tam_DailyMv.dmv_workout7} 

else if NOT ISNULL({EB_Tam_DailyMv.dmv_workout6}) then 
{EB_Tam_DailyMv.dmv_workout6}

else if NOT ISNULL({EB_Tam_DailyMv.dmv_workout5}) then 
{EB_Tam_DailyMv.dmv_workout5}

 else if NOT ISNULL({EB_Tam_DailyMv.dmv_workout4}) then 
 {EB_Tam_DailyMv.dmv_workout4}

 else if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout3}) then 
 {EB_Tam_DailyMv.dmv_workout3}

else if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout2}) then 
{EB_Tam_DailyMv.dmv_workout2}

else if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout1}) then 
{EB_Tam_DailyMv.dmv_workout1}

else "00:00"

哪个版本的sqlserver?同样在tag你写的是Crystal report 2008,对吗?或者sqlserver?sqlserver 2012和crystal report 2008那么您希望在sqlserver端或crystal report端执行此操作吗?列的数据类型是什么?列的数据类型是时间
if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout10}) then
{EB_Tam_DailyMv.dmv_workout10}

else  if NOT  ISNULL ({EB_Tam_DailyMv.dmv_workout9}) then
{EB_Tam_DailyMv.dmv_workout9}

else if  NOT ISNULL ({EB_Tam_DailyMv.dmv_workout8}) then 
{EB_Tam_DailyMv.dmv_workout8}

else if  NOT ISNULL ({EB_Tam_DailyMv.dmv_workout7}) then 
{EB_Tam_DailyMv.dmv_workout7} 

else if NOT ISNULL({EB_Tam_DailyMv.dmv_workout6}) then 
{EB_Tam_DailyMv.dmv_workout6}

else if NOT ISNULL({EB_Tam_DailyMv.dmv_workout5}) then 
{EB_Tam_DailyMv.dmv_workout5}

 else if NOT ISNULL({EB_Tam_DailyMv.dmv_workout4}) then 
 {EB_Tam_DailyMv.dmv_workout4}

 else if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout3}) then 
 {EB_Tam_DailyMv.dmv_workout3}

else if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout2}) then 
{EB_Tam_DailyMv.dmv_workout2}

else if NOT ISNULL ({EB_Tam_DailyMv.dmv_workout1}) then 
{EB_Tam_DailyMv.dmv_workout1}

else "00:00"