起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 404|回复: 21

决策数据集的查询问题[请求]

[复制链接]
发表于 2009-4-15 11:01:00 | 显示全部楼层 |阅读模式
使用决策数据集查询年龄段人数
原始sql语句如下
SELECT GDHR_JBXXSJB.AGE, GDHR_JBXXSJB.DW, GDHR_JBXXSJB.BM
  FROM GDHR_JBXXSJB

使用决策数据集的自定义维设置,设置完成后系统生成的sql语句如下
SELECT '30岁以下' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((GDHR_JBXXSJB.AGE <= 30))
UNION
SELECT '31-35岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30)AND (GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35)))
UNION
SELECT '36-40岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30) AND NOT(GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35)AND (GDHR_JBXXSJB.AGE > 36 and GDHR_JBXXSJB.AGE <= 40)))
UNION
SELECT '41-45岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30) AND NOT(GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35) AND NOT(GDHR_JBXXSJB.AGE > 36 and GDHR_JBXXSJB.AGE <= 40)AND (GDHR_JBXXSJB.AGE > 40 and GDHR_JBXXSJB.AGE <= 45)))
UNION
SELECT '46-50岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30) AND NOT(GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35) AND NOT(GDHR_JBXXSJB.AGE > 36 and GDHR_JBXXSJB.AGE <= 40) AND NOT(GDHR_JBXXSJB.AGE > 40 and GDHR_JBXXSJB.AGE <= 45)AND (GDHR_JBXXSJB.AGE > 46 and GDHR_JBXXSJB.AGE <= 50)))
UNION
SELECT '51-55岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30) AND NOT(GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35) AND NOT(GDHR_JBXXSJB.AGE > 36 and GDHR_JBXXSJB.AGE <= 40) AND NOT(GDHR_JBXXSJB.AGE > 40 and GDHR_JBXXSJB.AGE <= 45) AND NOT(GDHR_JBXXSJB.AGE > 46 and GDHR_JBXXSJB.AGE <= 50)AND (GDHR_JBXXSJB.AGE > 50 and GDHR_JBXXSJB.AGE <= 55)))
UNION
SELECT '56-60岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30) AND NOT(GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35) AND NOT(GDHR_JBXXSJB.AGE > 36 and GDHR_JBXXSJB.AGE <= 40) AND NOT(GDHR_JBXXSJB.AGE > 40 and GDHR_JBXXSJB.AGE <= 45) AND NOT(GDHR_JBXXSJB.AGE > 46 and GDHR_JBXXSJB.AGE <= 50) AND NOT(GDHR_JBXXSJB.AGE > 50 and GDHR_JBXXSJB.AGE <= 55)AND (GDHR_JBXXSJB.AGE > 55 and GDHR_JBXXSJB.AGE <= 60)))
UNION
SELECT '60岁以上' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30) AND NOT(GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35) AND NOT(GDHR_JBXXSJB.AGE > 36 and GDHR_JBXXSJB.AGE <= 40) AND NOT(GDHR_JBXXSJB.AGE > 40 and GDHR_JBXXSJB.AGE <= 45) AND NOT(GDHR_JBXXSJB.AGE > 46 and GDHR_JBXXSJB.AGE <= 50) AND NOT(GDHR_JBXXSJB.AGE > 50 and GDHR_JBXXSJB.AGE <= 55) AND NOT(GDHR_JBXXSJB.AGE > 55 and GDHR_JBXXSJB.AGE <= 60)AND (GDHR_JBXXSJB.AGE > 60)))
系统生成的语句中带union ,如果不带union,可以使用sqlfilter来过滤,像这种情况请问如何过滤查询啊

1.jpg

13.44 KB, 下载次数: 129

回复

使用道具 举报

发表于 2009-4-15 13:29:55 | 显示全部楼层
建议你在原始SQL上面进行过滤,然后再决策,而不是决策后再过滤
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 14:21:32 | 显示全部楼层
就是在原始sql 上过滤的,代码是这样的
TSQLDataSet(DataSetBrokerage30.DataSet).SQLFilter:='DW like '''+DataSetBrokerdept.DataSet.FieldByName('ZZJGBH').AsString+'%'+''' ';
TSQLDataSet(DataSetBrokerage30.DataSet).SQLFiltered:=true;

但是报错;
回复 支持 反对

使用道具 举报

发表于 2009-4-15 14:32:27 | 显示全部楼层
DataSetBrokerage30.DataSet是决策数据集?
那为何转成TSQLDataSet类型呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 14:50:48 | 显示全部楼层
DataSetBrokerage30.DataSet是决策数据集,转类型是为了加上sqlfilter,但是报错;向这种情况如何加过滤条件啊
回复 支持 反对

使用道具 举报

发表于 2009-4-15 15:43:52 | 显示全部楼层
转成这个类型TDecisionDataSet
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 15:57:53 | 显示全部楼层
和转成TSQLDataSet一样,也是报错。
说明一下,如果构造出的决策数据集sql语句是这个
SELECT '30岁以下' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((GDHR_JBXXSJB.AGE <= 30))
可以正常过滤;

如果再加上一个自定义维,决策数据集的sql语句是这个
SELECT '30岁以下' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((GDHR_JBXXSJB.AGE <= 30))
UNION
SELECT '31-35岁' AS "年龄段", COUNT(GDHR_JBXXSJB.age) AS "个数_年龄"
  FROM GDHR_JBXXSJB
  WHERE (GDHR_JBXXSJB.RYZT like 'A0061%') AND ((NOT(GDHR_JBXXSJB.AGE <= 30)AND (GDHR_JBXXSJB.AGE > 30 and GDHR_JBXXSJB.AGE <= 35)))

数据过滤就报错了;
回复 支持 反对

使用道具 举报

发表于 2009-4-15 16:07:52 | 显示全部楼层
加自定义维的SQL是这样的:
SELECT Name AS "客户名称", Kind AS "客户类别", '111' AS "自定义维1", SUM(CRM_CUSTOMER.PersonalAmount) AS "合计_员工数(人)"
  FROM CRM_CUSTOMER
  WHERE (CRM_CUSTOMER.KIND = '1')
  GROUP BY Name, Kind
不知你是怎么做出UNION的,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-4-15 16:40:48 | 显示全部楼层
我有重新发了个图片,定义多个自定义维后就出现union了
回复 支持 反对

使用道具 举报

发表于 2009-4-15 16:55:31 | 显示全部楼层
SELECT Name AS "客户名称", Kind AS "客户类别", '111' AS "自定义维1", '21321' AS "自定义维2", '2323' AS "自定义维3", '2323' AS "自定义维4", '2323' AS "自定义维5", '23233' AS "自定义维6", '343' AS "自定义维7", '343' AS "自定义维8", '3434' AS "自定义维9", SUM(CRM_CUSTOMER.PersonalAmount) AS "合计_员工数(人)", COUNT(CRM_CUSTOMER.PersonalAmount) AS "个数_员工数(人)", AVG(CRM_CUSTOMER.PersonalAmount) AS "统计平均值_员工数(人)"
  FROM CRM_CUSTOMER
  WHERE (((((((((CRM_CUSTOMER.KIND = '1')) AND ((CRM_CUSTOMER.KIND = '2'))) AND ((CRM_CUSTOMER.NAME = '1'))) AND ((CRM_CUSTOMER.KIND = '2'))) AND ((CRM_CUSTOMER.NAME = '1'))) AND ((CRM_CUSTOMER.KIND = '2'))) AND ((CRM_CUSTOMER.KIND = '3434'))) AND ((CRM_CUSTOMER.KIND = '34'))) AND ((CRM_CUSTOMER.KIND = '343'))
  GROUP BY Name, Kind

我定义了很多的自定义维也没有出现这个现象,请问你用的是哪个版本呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-22 10:49 , Processed in 0.045797 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表