以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]筛选条件二选一  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=144742)

--  作者:lgj716330
--  发布时间:2019/12/28 13:34:00
--  [求助]筛选条件二选一
Dim b6 As New SQLGroupTableBuilder("统计表","表A")
b6.Groups.AddDef("类型") 
b6.Groups.AddDef("名称") 
b6.Groups.AddDef("季度") 
b6.Groups.AddDef("性质") 
b6.Totals.AddDef("金额") 
b6.Filter = "" 

b6.Build 

相同的"类型|名称|季度"对应的“性质”有“预估”和“实际”
想实现,如果存在“实际”,就取实际的数据,如果没有“实际”,就取“预估”的数据,如图,上面标色的筛选条件要怎么写

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:22.png
图片点击可在新窗口打开查看


[此贴子已经被作者于2019/12/28 13:34:35编辑过]

--  作者:有点蓝
--  发布时间:2019/12/28 14:06:00
--  
这种无法使用分组统计处理,使用sql:

select
类型,名称,季度,iif(实际=-1,\'预估\',\'实际\') as 性质, iif(实际=-1,预估,实际) as 金额 from (select 类型,名称,季度,Sum(iif(性质 = \'实际\',金额,-1)) As 实际,Sum(iif(性质 = \'预估\',金额,-1)) As 预估 from 表A Group by 类型,名称,季度) as  a

--  作者:lgj716330
--  发布时间:2019/12/28 16:08:00
--  
Se/ect 类型,名称,年份,季度,iif(实际=-1,\'预估\',\'实际\') as 性质, iif(实际=-1,预估,实际) as 金额 from (se/ect 类型,名称,年份,季度,Sum(iif(性质 = \'实际\',金额,-1)) As 实际,Sum(iif(性质 = \'预估\',金额,-1)) As 预估 from {表A} Group by 类型,名称,年份,季度) as A

无法完成延迟准备。
无法预定义语句。
\'=\' 附近有语法错误。
\'=\' 附近有语法错误。

--  作者:有点蓝
--  发布时间:2019/12/28 16:53:00
--  
如果是SqlServer数据库,把iif改为case when:http://www.foxtable.com/webhelp/topics/1827.htm
--  作者:lgj716330
--  发布时间:2019/12/28 17:36:00
--  
Se/ect 类型,名称,年份,季度,(case when 实际=-1 then \'预估\' else \'实际\' end) as 性质, (case when 实际=-1 then 预估 else 实际 end) as 金额 from (se/ect 类型,名称,年份,季度,Sum(case when 性质 = \'实际\' then 金额 else -1 end) As 实际,Sum(case when 性质 = \'预估\' then 金额 else -1 end) As 预估 from 表A Group by 类型,名称,年份,季度) as A

取实际数据的时候,金额会被减掉“预估”的记录数,比如金额是200,“预估”记录有7条,取过来的结果是193,哪里还需要调整

--  作者:lgj716330
--  发布时间:2019/12/28 19:00:00
--  
嗯,-1改成0,好象可以了
--  作者:lgj716330
--  发布时间:2020/1/16 10:29:00
--  

Dim sql As String = "Se/ect 编号,部门,类型,名称,年份,季度,(case when 实际=0 then \'预估\' else \'实际\' end) as 性质, (case when 实际=0 then 预估 else 实际 end) as 成本金额 from (se/ect 编号,部门,类型,名称,年份,季度,Sum(case when 性质 = \'实际\' then 成本金额 else 0 end) As 实际,Sum(case when 性质 = \'预估\' then 成本金额 else 0 end) As 预估,Sum(case when 性质 = \'实际\' then 目标成本 else 0 end) As 实际,Sum(case when 性质 = \'预估\' then 目标成本 else 0 end) As 预估 from 汇总三 Group by 编号,部门,类型,名称,年份,季度) as A" 


以上只有成本金额时没问题,加了目标成本即标颜色部分后,就生成不了,要怎么改下,SQL不太懂


--  作者:有点蓝
--  发布时间:2020/1/16 10:52:00
--  
Dim sql As String = "Se/ect 编号,部门,类型,名称,年份,季度,(case when 实际=0 then \'预估\' else \'实际\' end) as 性质, (case when 实际=0 then 预估 else 实际 end) as 成本金额 from (se/ect 编号,部门,类型,名称,年份,季度,Sum(case when 性质 = \'实际\' then 成本金额 else 0 end) As 实际,Sum(case when 性质 = \'预估\' then 成本金额 else 0 end) As 预估,Sum(case when 性质 = \'实际\' then 目标成本 else 0 end) As 目标实际,Sum(case when 性质 = \'预估\' then 目标成本 else 0 end) As 目标预估 from 汇总三 Group by 编号,部门,类型,名称,年份,季度) as A" 

不能有重复的列名

--  作者:lgj716330
--  发布时间:2020/1/16 11:38:00
--  
上面的也没生成,改成下面,也是没用
Dim sql As String = "Se/ect 编号,部门,类型,名称,年份,季度,(case when 实际=0 then \'预估\' else \'实际\' end) as 性质,(case when 实际=0 then 预估 else 实际 end) as 成本金额 from (se/ect 编号,部门,类型,名称,年份,季度,Sum(case when 性质 = \'实际\' then 成本金额 else 0 end) As 实际,Sum(case when 性质 = \'预估\' then 成本金额 else 0 end) As 预估 from 汇总三 Group by 编号,部门,类型,名称,年份,季度) as A,(case when 实际=0 then 预估 else 实际 end) as 目标成本 from (se/ect 编号,部门,类型,名称,年份,季度,Sum(case when 性质 = \'实际\' then 目标成本 else 0 end) As 目标实际,Sum(case when 性质 = \'预估\' then 目标成本 else 0 end) As 目标预估 from 汇总三 Group by 编号,部门,类型,名称,年份,季度) as B"



--  作者:有点蓝
--  发布时间:2020/1/16 11:58:00
--  
导出这个表数据发上来测试