邹建帮我啊,用了你的方法我的问题是解决了,但还有一点小问题,可以再帮我看看吗?
http://community.csdn.net/Expert/topic/3904/3904693.xml?temp=.219494
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--测试数据
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 行)
--*/
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
只好重开新贴了
邹建你好,谢谢你啊,用你的方法可以啊,但我又试了一下,就是能不能一下子统计出好几个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
问题点数:0、回复次数:4Top
1 楼zjcxc(邹建)回复于 2005-04-03 20:17:24 得分 0
--测试数据
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 varchar(1000)
as
set nocount on
declare @i int
set @i=len(@productid)
if isnull(@i,0)<1 return
set rowcount @i
select id=identity(int,1,1) into # from syscolumns a,syscolumns b
set rowcount 0
select a.productid,a.dates,quantity=isnull(b.quantity,0)
from(
select a.productid,b.dates
from(
select productid=substring(@productid,id,charindex(',',@productid+',',id)-id)
from #
where substring(','+@productid,id,1)=','
)a,#temp b
)a left join details b on a.productid=b.productid and a.dates=b.orderdate
order by a.productid,a.dates
go
--调用
exec p_qry '1'
exec p_qry '1,2'
exec p_qry '2,3'
exec p_qry '1,2,3'
go
--删除测试
drop table #temp,details
drop proc p_qry
/*--结果
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
(所影响的行数为 1 行)
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
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 0
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 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
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 0
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
--*/Top
2 楼suandetian()回复于 2005-04-04 00:09:07 得分 0
好强的邹建啊,这么晚了不好意思,真是太麻烦你了,让你费神了.
我刚才在本机试了一下,搞定,先谢了
目前是用 productid一个或几个传给存储过程让它计算出数据来,但我现在的productid是存在一张表里面即:
product 表
create table product (productid varchar(20))
insert into product values ('1')
insert into product values ('2')
insert into product values ('3')
可不可以不用把product表中的productid全部进行计算啊(而不用一个或几个地传给存储过程)
这是三个表的结构:
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')
create table product (productid varchar(20))
insert into product values ('1')
insert into product values ('2')
insert into product values ('3')
Top
3 楼winternet(冬天)回复于 2005-04-04 10:30:25 得分 0
upTop
4 楼zjcxc(邹建)回复于 2005-04-04 10:38:21 得分 0
--那不是更简单
--查询的存储过程
create proc p_qry
as
select a.productid,a.dates,quantity=isnull(b.quantity,0)
from(
select a.productid,b.dates
from product a,#temp b
)a left join details b on a.productid=b.productid and a.dates=b.orderdate
order by a.productid,a.dates
goTop




