以文本方式查看主题

-  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=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 凭证日期  

确实很快!图片点击可在新窗口打开查看