好麻烦,这个语句是关联两个表取数据,如果有匹配就显示原始数据,没有就为0,怎么弄呢?
表结构
销售表: 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




