Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

日期联合查询后筛选

一十先生  发表于:2014-09-10 11:26:17  
复制

联合查询日期筛选

表1建查询1,

 表2建查询2,
将查询1和查询2建一联合查询后得联合查询表,
select 查询1.项目名称,查询1.收款日期,null as 付款日期 from 查询1
UNION ALL select  查询2.项目名称,null as 收款日期,查询2.付款日期 from 查询2
ORDER BY 项目名称;
点收款日期和付款日期得到如下两图
为什么日期筛选器下面的视图不一样呢?
根据收款日期筛选,怎么就得下如下视图呢?付款日期的内容哪去了?
 
根据联合查询再建一最终查询,打开最终查询设计视图,
得到如下视图
怎么筛选不出结果呢?
急昐各位老师回复,谢谢.

 

Top
煮江品茶 发表于:2014-09-10 16:06:22

费这劲干嘛?

收款付款放一张表就行了。



一十先生 发表于:2014-09-10 16:11:28

这只是个示例嘛,收款和付款肯定应该分开的两个表三.



煮江品茶 发表于:2014-09-10 16:29:56
我是说收付款相对于项目来说皆可能是多次,也即项目收款与付款之间不大可能均为一对一关系,由此来看,数据的呈现也就无必要用两个金额字段(收款和付款)。也因此,目前你所做的数据呈现,看不出有什么实际意义。

正常的数据呈现应该为:项目名称,收付类别,时间,金额


只有在做借贷余查询时,才有必要做多个金额字段,比如:项目名称,摘要,时间,收款,付款,余额



一十先生 发表于:2014-09-10 17:27:35

老师,您说的问题我明白。我的示例只是说明分别来自两个表的日期实行联合查询后出现了数据结构问题。我想问的是为什么出现这样的问题,问题出在哪个步骤?怎样才能避免两个日期联合查询后不出现类似问题。



朱先生 发表于:2014-09-16 11:46:44
select 查询1.项目名称,查询1.收款日期,0l as 付款日期 from 查询1
UNION ALL select  查询2.项目名称,0 as 收款日期,查询2.付款日期 from 查询2

ORDER BY 项目名称;


将NULL改为0就避免了出现空白的问题



一十先生 发表于:2014-09-17 10:21:44

首先感谢朱先生的热心回复,但null改为0后,日期型数据就变成了文本型了,我想该字段仍为日期型,怎么办?就这个问题一直困惑着我.日期型数据怎样在联合查询后,仍然为日期型数据?



缪炜 发表于:2014-09-18 15:39:29
select 查询1.项目名称,查询1.收款日期,'' as 付款日期 from 查询1
UNION ALL select  查询2.项目名称,'' as 收款日期,查询2.付款日期 from 查询2
ORDER BY 项目名称;
这样呢,但你的表设计还是存在问题的,这两个价格分开总是太对的,如果只是示例,那没有什么关系

朱先生 发表于:2014-09-18 21:04:22

联合查询

select 表1.项目名称,表1.收款日期, '' as 付款日期, 表1.金额 from 表1 ;
UNION ALL select  表2.项目名称,'' as  收款日期,表2.付款日期, 表2.金额 from 表2
ORDER BY 项目名称;


最终查询

SELECT 查询3.项目名称, (查询3.收款日期), (查询3.付款日期), 查询3.金额
FROM 查询3
WHERE (查询3.付款日期)>'2012-01-01';


可查询出大于2012-01-01 的两条记录



朱先生 发表于:2014-09-19 21:50:32
有这么多人的回复,难道就没有一个人的回复有用吗?

一十先生 发表于:2014-09-22 11:05:16

各位老师;您们好,首先感谢您们的热心回复,针对这个问题我试过很多种解决方法,如将"null”改为0,"null”改为"","null”改为“0000-00-00”都是不行的,最终得到的都是文本,不是日期,虽然可以暂时解决最终查询里面的>'2012-01-01'的问题,但是不是日期数据就不能参与其它更深一层次的计算。

我用了cdate函数,即

 

联合查询

select 表1.项目名称,表1.收款日期, cdate(0)  as 付款日期, 表1.金额 from 表1 ;
UNION ALL select  表2.项目名称,cdate(0)  as  收款日期,表2.付款日期, 表2.金额 from 表2
ORDER BY 项目名称;

解决了文本变日期的问题,但版面确实不太美观,为0的数值变成了00:00:00格式,该格式不符合日期格式0000-00-00不利于排序。

如下图所示:

怎样解决格式问题?



朱先生 发表于:2014-09-23 22:28:21

联合查询

select 表1.项目名称,表1.收款日期, FORMAT(cdate(0),"0000-00-00")  as 付款日期, 表1.金额 from 表1 ;
UNION ALL select  表2.项目名称,FORMAT(cdate(0),"0000-00-00")   as  收款日期,表2.付款日期, 表2.金额 from 表2
ORDER BY 项目名称;

格式是     0000-00-00    符合你的要求

是否便于更深一层次的计算,没试过

还是由你来做吧



一十先生 发表于:2014-09-24 09:18:57

朱哥哥,还是不行哦,用了format,日期型怎么就变成了“文本型”?文本型显然不能进行计算的。

 



朱先生 发表于:2014-09-24 11:26:48
可以按日期进行查询啊

总记录:13篇  页次:1/1 9 1 :