Foxtable(狐表)用户栏目专家坐堂 → sql语句求教


  共有16060人关注过本帖树形打印复制链接

主题:sql语句求教

帅哥哟,离线,有人找我吗?
chenwuwenyu
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:180 积分:1239 威望:0 精华:0 注册:2009/5/5 10:20:00
sql语句求教  发帖心情 Post By:2009/10/22 7:38:00 [只看该作者]

If e.DataCol.Name = "入库" or e.DataCol.Name = "出库"  Then
for i as Integer = 0 to tables("kc").count - 1
    
    Tables("kc").Rows(i)("出库")= DataTables("表A").Compute("Sum(数量)", " 型号 = '" & Tables("kc").Rows(i)("型号")& "' ")+DataTables("jh").Compute("Sum(数量)", " 型号 = '" & Tables("kc").Rows(i)("型号")& "'and 状态 = '出库 ' ")+DataTables("jh").Compute("Sum(数量)", " 型号 = '" & Tables("kc").Rows(i)("型号")& "'and 状态 = '暂借 ' ")
    Tables("kc").Rows(i)("入库")= DataTables("jh").Compute("Sum(数量)", " 型号 = '" & Tables("kc").Rows(i)("型号")& "'and 状态 = '入库 ' ")+DataTables("jh").Compute("Sum(数量)", " 型号 = '" & Tables("kc").Rows(i)("型号")& "'and 状态 = '归还 ' ")

   
Next
end if
fox中的代码,意思就是kc表中的入库和出库两列的数据分别是从jh表和表A中统计得到的
现在的问题是:
我现在不用内部表了,sql语句怎么实现这种效果呢,没有思路了,本来想用多表查询,不过效果好像不对
请教各位,不胜感激


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/22 9:31:00 [只看该作者]

呵呵,内部表和外部表,只是存储位置不同,设计思路一样。


 回到顶部
帅哥哟,离线,有人找我吗?
chenwuwenyu
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:180 积分:1239 威望:0 精华:0 注册:2009/5/5 10:20:00
  发帖心情 Post By:2009/10/22 12:04:00 [只看该作者]

能否告知代码一二,
我是想用sql语句实现,涉及到在三个表中查询数据
不知道怎么写

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47497 积分:251403 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2009/10/22 12:11:00 [只看该作者]

、多表查询

有的时候,你可能希望查询表的列来自于多个表,可以通过JOIN语句来实现这样的功能。JOIN语句可以让你从已经定义了相互关系的工作表中检索记录,而不用管记录和工作表之间的关系是一对一、一对多还是多对多。

语法:

SELECT 字段列表 FROM {表1} INNER JOIN {表2} ON {表1}.列名 = {表2} .列名

因为字段来自于两个表,所以如果对于两个表都有的字段,必须明确表的名称。
ON关键词指定两个表通过哪一列进行连接,指定的字段必须具备相同的数据类型和长度。

示例:

SELECT {订单明细}.*, 产品名称 FROM {订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID ORDER BY 订单ID

上述语句生成的查询表,包括订单明细的所有列,以及该订单明细对应的产品名称(来源于产品表)

INNER JOIN要求两个表必须都有对应的记录,才会在查询表中生成记录。你还可以用LEFT JOIN 或者 RIGHT JOIN,前者只要求左边的表有对应的记录即可,后者只要求右边的表有对应的记录即可。

数据不仅可以来自于两个表,还可以来自于更多的表,例如下面的语句:

SELECT 订购日期, {订单明细}.*, 产品名称 FROM ({订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID) INNER JOIN {订单} ON {订单明细}.订单ID = {订单}.订单ID ORDER BY 订购日期

上面的查询表的列来自于三个表,其中订购日期来自于订单表,产品名称来自于产品表,其余来自订单明细表。

下面的查询,列来自于四个表:

SELECT 订购日期,公司名称,产品名称, 数量, {订单明细}.单价, 折扣, (数量 * {订单明细}.单价 * (1-折扣)) AS 金额 FROM (({订单明细} INNER JOIN {产品} ON {订单明细}.产品ID = {产品}.产品ID) INNER JOIN {订单} ON {订单明细}.订单ID = {订单}.订单ID) INNER JOIN {客户} ON {订单}.客户ID = {客户}.客户ID

在上面的查询中,因为产品表和订单明细表都有单价列,所以字段列表中对于单价列的引用,要明确引用的是哪一个表的单价列,例如:订单明细.单价

此外,在有多个JOIN语句的情况下,靠前的JOIN语句要用圆括号括起来,如前面的例子所示。


 回到顶部
帅哥哟,离线,有人找我吗?
雪山飞狐
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:13 积分:166 威望:0 精华:0 注册:2008/9/20 14:02:00
  发帖心情 Post By:2009/10/23 23:54:00 [只看该作者]

内部表SQL:
select a.型号,IIF(b.数量 is null,0,b.数量) +IIF(d.数量 is null,0 ,d.数量)  as 出库,IIF(f.数量 is null,0 ,f.数量) as 入库 from ((({kc} as a
left join (select 型号,sum(数量) as 数量 from {表A} group by 型号) as b on a.型号=b.型号) 
left join (select c.型号,sum(c.数量) as 数量 from (select 型号,数量 from {jh} where 状态='出库' or  状态='暂借') as c group by c.型号) as d on a.型号=d.型号 )
left join (select e.型号,sum(e.数量) as 数量 from (select 型号,数量 from {jh} where 状态='入库' or  状态='归还') as e group by e.型号) as f on a.型号=f.型号)

外部表SQL:
select a.型号,isnull(b.数量,0) +isnull(d.数量,0)  as 出库,isnull(f.数量,0) as 入库 from kc as a
left join (select 型号,sum(数量) as 数量 from 表A group by 型号) as b on a.型号=b.型号
left join (select c.型号,sum(c.数量) as 数量 from (select 型号,数量 from jh where 状态='出库' or  状态='暂借') as c group by c.型号) as d on a.型号=d.型号 
left join (select e.型号,sum(e.数量) as 数量 from (select 型号,数量 from jh where 状态='入库' or  状态='归还') as e group by e.型号) as f on a.型号=f.型号
[此贴子已经被作者于2009-10-23 23:55:21编辑过]

 回到顶部