Foxtable(狐表)用户栏目专家坐堂 → 很简单,可惜我水平不够,求助中


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

主题:很简单,可惜我水平不够,求助中

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
很简单,可惜我水平不够,求助中  发帖心情 Post By:2010/12/23 11:58:00 [显示全部帖子]

出库表:       客户,出库单号,日期
出库明细表: 出库单号,产品

生成表:
客户,产品,日期(
要求生成:每个客户订购的每一种产品最后出库日期的sql公式:),

当然后面还可以做到指定到一个想要查询的产品

 


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 14:29:00 [显示全部帖子]

出库表:  
出库单号 日期       客户
1     2010-10-11  A
2     2010-12-11  A
3     2010-10-11  B

 

出库明细:关联列为出库单号  
出库单号 产品 数量
1          一    10
1          二    10
2          一    10
3          一    10  
3          二    10  

 

第一步要得到每个客户每个产品的最后订购日期:    
出库单号 客户 产品 最后订购日期 订购数量
2          A      一      2010-12-11  10
1          A      二      2010-10-11  10
3          B      一      2010-10-11  10
3          B      二      2010-10-11  10

 

第二步:要得到“产品一”(变量)最后的订购日期:    
出库单号 客户 产品 最后订购日期 订购数量
2          A      一      2010-12-11   10
3          B      一      2010-10-11   10


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 15:19:00 [显示全部帖子]

我目前只做到这样:

先筛选出每个客户,每种产品的最后的订购产品:

select max(日期) as 日期 ,客户,产品 from 出库,出库明细 where  出库.出库单号 = 出库明细.出库单号 group by 客户,产品

第二步:子查询:

select  出库单号,日期,客户,产品,数量 from 出库 inner join 出库明细 on 出库.出库单号 = 出库明细.出库单号
WHERE EXISTS (select max(日期) as 日期 ,客户,产品 from 出库,出库明细 where  出库.出库单号 = 出库明细.出库单号
group by 客户,产品)

可惜错了 ,子查询的语法结构弄错了

[此贴子已经被作者于2010-12-23 15:38:07编辑过]

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 16:06:00 [显示全部帖子]

出库单号1对应两条明细,单号2对应一条明细。单号3对应两条明细


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 16:14:00 [显示全部帖子]

专家给出的答案:

 

--> 测试数据: #ta
if object_id('tempdb.dbo.#ta') is not null drop table #ta
go
create table #ta (出库单号 int,日期 datetime,客户 varchar(1))
insert into #ta
select 1,'2010-10-11','A' union all
select 2,'2010-12-11','A' union all
select 3,'2010-10-11','B'
--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (出库单号 int,产品 varchar(2),数量 int)
insert into #tb
select 1,'',10 union all
select 1,'',10 union all
select 2,'',10 union all
select 3,'',10 union all
select 3,'',10

;
with cte as
(
   
select a.出库单号, 客户, 产品, 最后订购日期= 日期  ,订购数量=数量
    
from #ta a , #tb b
   
where  a.出库单号=b.出库单号
)
select * from cte t
where not exists(select 1 from cte where 客户=t.客户 and 产品=t.产品 and 最后订购日期>t.最后订购日期)


出库单号        客户   产品   最后订购日期                  订购数量
----------- ---- ---- ----------------------- -----------
1           A    二    2010-10-11 00:00:00.000 10
2           A    一    2010-12-11 00:00:00.000 10
3           B    一    2010-10-11 00:00:00.000 10
3           B    二    2010-10-11 00:00:00.000 10

(
4 行受影响)


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 16:16:00 [显示全部帖子]

;with cte as
(
   
select a.出库单号, 客户, 产品, 最后订购日期= 日期  ,订购数量=数量
    
from #ta a , #tb b
   
where  a.出库单号=b.出库单号
)
select * from cte t
where not exists(select 1 from cte where 客户=t.客户 and 产品=t.产品 and 最后订购日期>t.最后订购日期)


出库单号        客户   产品   最后订购日期                  订购数量
----------- ---- ---- ----------------------- -----------
1           A    二    2010-10-11 00:00:00.000 10
2           A    一    2010-12-11 00:00:00.000 10
3           B    一    2010-10-11 00:00:00.000 10
3           B    二    2010-10-11 00:00:00.000 10

(
4 行受影响)

这个在foxtable中要怎么用啊


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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 16:34:00 [显示全部帖子]

杯具了,我用的是SQL Server 2000,刚才把代码复制进行,提示在with附近有错误

如何转为sql 2000的支持代码。

我用的是sql 2000 暂时还不想安装sql 2005

[此贴子已经被作者于2010-12-23 16:35:46编辑过]

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


加好友 发短信
等级:三尾狐 帖子:734 积分:5645 威望:0 精华:0 注册:2008/9/6 11:22:00
  发帖心情 Post By:2010/12/23 16:43:00 [显示全部帖子]

试试这样是否可以:

 select a.客户,b.产品,b.数量 as 订购数量,max(a.出库单号),max(a.日期) as 最后订购日期 from 出库表 a,出库明细 b where a.出库单号=b.出库单号 group by a.客户,b.产品,b.数量.

 

 

如果数量也分组,可能生成最后的结果会偏差。


 回到顶部