CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

好麻烦,这个语句是关联两个表取数据,如果有匹配就显示原始数据,没有就为0,怎么弄呢?

楼主suandetian()2005-04-03 13:00:42 在 MS-SQL Server / 应用实例 提问

表结构  
   
  销售表:     details  
     
  create   table   details(productid   int,orderdate   datetime,quantity   int)  
  insert   into   (1,'2005-3-2   14:00:00',20)  
  insert   into   (1,'2005-3-2   15:00:00',null)  
  insert   into   (1,'2005-3-2   15:40:00',15)  
  insert   into   (1,'2005-3-3   6:00:00',20)  
  insert   into   (2,'2005-3-2   15:30:00',null)  
  insert   into   (3,'2005-3-2   14:00:00',22)  
   
  日期表:     #temp  
     
  create   table   #temp(dates   datetime)  
  insert   into   #temp   values   ('2005-3-2   11:00:00')  
  insert   into   #temp   values   ('2005-3-2   14:00:00')  
  insert   into   #temp   values   ('2005-3-2   17:00:00')  
   
   
  现在就是要找出details表中的日期与#temp表的日期相匹配的记录(日期以#temp表为准,#temp表如果有三个日期,就要取三条记录)  
  如果匹配就取出这条记录,如果不匹配就把quantity设为0  
   
  要取的结果如下:  
   
  如果选择的productid=1  
   
  1,'2005-3-2   11:00:00',0  
  1,'2005-3-2   14:00:00',20  
  1,'2005-3-2   17:00:00',0  
   
   
  如果选择的productid=2  
   
  2,'2005-3-2   11:00:00',0  
  2,'2005-3-2   14:00:00',0  
  2,'2005-3-2   17:00:00',0  
   
  如果选择的productid=3  
   
  3,'2005-3-2   11:00:00',0  
  3,'2005-3-2   14:00:00',22  
  3,'2005-3-2   17:00:00',0  
  问题点数:80、回复次数:3Top

1 楼newpower888()回复于 2005-04-03 14:12:48 得分 10

创建用户自定义涵数,然后查询的时候就可以用它来代替.Top

2 楼zjcxc(邹建)回复于 2005-04-03 15:00:31 得分 70

--测试数据    
  create   table   details(productid   int,orderdate   datetime,quantity   int)  
  insert   into   details   values(1,'2005-3-2   14:00:00',20)  
  insert   into   details   values(1,'2005-3-2   15:00:00',null)  
  insert   into   details   values(1,'2005-3-2   15:40:00',15)  
  insert   into   details   values(1,'2005-3-3   6:00:00',20)  
  insert   into   details   values(2,'2005-3-2   15:30:00',null)  
  insert   into   details   values(3,'2005-3-2   14:00:00',22)  
   
  create   table   #temp(dates   datetime)  
  insert   into   #temp   values   ('2005-3-2   11:00:00')  
  insert   into   #temp   values   ('2005-3-2   14:00:00')  
  insert   into   #temp   values   ('2005-3-2   17:00:00')  
  go  
   
  --查询的存储过程    
  create   proc   p_qry  
  @productid   int  
  as  
  select   productid=@productid,a.dates,quantity=isnull(b.quantity,0)  
  from   #temp   a  
  left   join   details   b   on   b.productid=@productid   and   a.dates=b.orderdate  
  go  
   
  --调用  
  exec   p_qry   1  
  exec   p_qry   2  
  exec   p_qry   3  
  go  
   
  --删除测试  
  drop   table   #temp,details  
  drop   proc   p_qry  
   
  /*--结果  
  productid       dates                                                       quantity          
  -----------   -------------------------------   -----------  
  1                       2005-03-02   11:00:00.000                   0  
  1                       2005-03-02   14:00:00.000                   20  
  1                       2005-03-02   17:00:00.000                   0  
   
  (所影响的行数为   3   行)  
   
  productid       dates                                                       quantity          
  -----------   -------------------------------   -----------  
  2                       2005-03-02   11:00:00.000                   0  
  2                       2005-03-02   14:00:00.000                   0  
  2                       2005-03-02   17:00:00.000                   0  
   
  (所影响的行数为   3   行)  
   
  productid       dates                                                       quantity          
  -----------   -------------------------------   ---------------  
  3                       2005-03-02   11:00:00.000                   0  
  3                       2005-03-02   14:00:00.000                   22  
  3                       2005-03-02   17:00:00.000                   0  
   
  (所影响的行数为   3   行)  
  --*/  
  Top

3 楼suandetian()回复于 2005-04-03 17:08:15 得分 0

邹建你好,谢谢你啊,用你的方法可以啊,但我又试了一下,就是能不能一下子统计出好几个productid的数据呢,现在是根据存储过程一个一个查,可不可以传进好几个productid号,然后生成记录呢  
  我的productid   是   varchar类型的  
  我试着改你的存储过程,把@product   int   改为   @product   varchar(200)  
  但我做出来的效果是错误的,再帮帮我啊  
   
  就是如果传进来:     1,2   ,结果要如下  
   
  productid             dates                                                     quantity                      
  -----------     -------------------------------     -----------      
  1                                             2005-03-02     11:00:00.000                                     0      
  1                                             2005-03-02     14:00:00.000                                     20      
  1                                             2005-03-02     17:00:00.000                                     0     2                                             2005-03-02     11:00:00.000                                     0      
  2                                             2005-03-02     14:00:00.000                                     0      
  2                                             2005-03-02     17:00:00.000                                     0Top

相关问题

  • 关联表语句问题。
  • 表关联的sql语句(急!)
  • 表关联sql语句问题,谢谢
  • 多表关联查询语句
  • 好麻烦,这个语句是关联两个表取数据,如果有匹配就显示原始数据,没有就为0,怎么弄呢?
  • 关于表关联时SQL语句的关联条件
  • 查找两个表中不匹配的SQL语句
  • ASP.NET中SQL语句用关联的为什么DATASET会提示类型不匹配的错误
  • 关联表的语句错误,帮忙看一下啊
  • 关于外表关联查询语句的问题?

关键词

  • 选择
  • 匹配
  • 表
  • 日期
  • insert
  • 记录
  • temp
  • details
  • 选择的productid

得分解答快速导航

  • 帖主:suandetian
  • newpower888
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo