以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 请教:关于查询表的行来自多个表按时间顺序排列的最优算法。 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=57417) |
-- 作者:关键下一秒 -- 发布时间:2014/9/24 14:28:00 -- 请教:关于查询表的行来自多个表按时间顺序排列的最优算法。 有如下表: 表1-进料表 内容如下: 进货日期 金额 2014-01-21 10000 2014-02-13 1212 2014-03-21 233 2014-06-12 4300 2014-08-04 2340 表2-退货表 内容如下: 退货日期 金额 2014-03-02 -12 2014-05-30 -144 2014-09-21 -340 现在要按时间顺序将上面两个表的数据加入下表: 表3-结帐单 凭证日期 金额 2014-01-21 10000 2014-02-13 1212 2014-03-02 -12 2014-03-21 233 2014-05-30 -144 2014-06-12 4300 2014-08-04 2340 2014-09-21 -340 请教:在数据量比较多时,怎样做速度最快? 以上,谢谢! [此贴子已经被作者于2014-9-24 14:28:25编辑过]
|
-- 作者:Bin -- 发布时间:2014/9/24 14:33:00 -- 五、UNION 运算符 UNION运算符用于组合两个查询的结果。 SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = \'中国\' UNION SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = \'中国\' 两个查询的字段名称、个数、类型必须完全一致才行。 默认情况下,UNION会自动排除重复的行,然后你可以用ALL关键词来确保返回所有的行,例如: SELECT 公司名称, 地址 FROM {客户} WHERE 国家 = \'中国\' UNION ALL SELECT 公司名称, 地址 FROM {供应商} WHERE 国家 = \'中国\' |
-- 作者:Bin -- 发布时间:2014/9/24 14:35:00 -- 后面的 WHere 国家=\'中国\' 改为 Order BY [进货日期] |
-- 作者:关键下一秒 -- 发布时间:2014/9/24 14:43:00 -- 谢谢!但是: 两个查询的字段名称、个数、类型必须完全一致才行。 这个条件中的“字段名称”没办法保证。有没有更好的办法呢? 另外,这查询出来的内容没办法解决上面的排序要求。 [此贴子已经被作者于2014-9-24 14:44:36编辑过]
|
-- 作者:Bin -- 发布时间:2014/9/24 14:44:00 -- as 另命名就好了 select 列1 as 新名称, |
-- 作者:jspta -- 发布时间:2014/9/24 14:55:00 -- 5楼是最好解决方法,效率最高 |
-- 作者:关键下一秒 -- 发布时间:2014/9/24 15:04:00 -- 谢谢! |
-- 作者:关键下一秒 -- 发布时间:2014/9/24 15:29:00 -- SELECT 收料单别 as 凭证单别,收料单号序号 as 凭证单号,收料日期 as 凭证日期, 进货金额-扣款金额 as 应付金额 FROM {PUR收料单} WHERE 确认码 = \'Y\' and 结帐码=0 UNION ALL SELECT 退货单别 as 凭证单别,退货单号 as 退货单号,退货日期 as 凭证日期,0-退货金额 as 应付金额 FROM {PUR退货单单头} WHERE 确认码 = \'Y\' and 结帐码=0 UNION SELECT 进货单别 as 凭证单别,进货单号序号 as 凭证单号,进货日期 as 凭证日期, 加工金额-扣款金额 as 应付金额 FROM {MOC托外进货单档} WHERE 确认码 = \'Y\' and 结帐码=0 UNION ALL SELECT 退货单别 as 凭证单别,退货单号 as 退货单号,退货日期 as 凭证日期,0-退货金额 as 应付金额 FROM {MOC托外退货单头档} WHERE 确认码 = \'Y\' and 结帐码=0 ORDER BY 凭证日期 确实很快!
|