请大家帮忙看看!高分。 (200分)

  • 主题发起人 主题发起人 bike
  • 开始时间 开始时间
B

bike

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟初学SQL,有一个问题请教:
use bankcard_hxb
go
truncate table tblrptunoin
DECLARE @DATE DATETIME,@item char(4),@item_0 char(1),@ymd char(1),@bank varchar(10),@value1 decimal (9),@value2 decimal(9),@value3 decimal(9),@value4 decimal(9)
set @value1='251478'
set @value2='24581'
set @value3='3584257'
set @value4='2587412569'
SELECT @DATE = '1999-01-01'
WHILE @DATE < '2002-01-01'
BEGIN
SELECT @DATE = DATEADD(DD, 1, @DATE)
(1.当@date为月底而不是年底时,@ymd='m',当@date为年底时,@ymd='y',其它@date='d')
(2. @bank的值要求从另一表tblbank字段bankno取出,一个值取出几次无要求)
(3.@item的值也为tblitem字段itemno的值,与上一样同样取值, 但当@item=(0101或2014或3547...)等一类值时,@item_0=1
当@item=(2547或2514..)等一类时,@item_0=2,当@item=(2142或5847..)等一类值时,@item_0=3,@item=其他数时,item_0=4)

set @value1=@value1+15
set @value2=@value2-26
set @value3=@value3+80
set @value4=@value4-13

INSERT INTO tblrptunoin(DATE,item,item_0,ymd,bank,value1,value2,value3,value4) VALUES(@DATE,@item,@item_0,@ymd,@bank,@value1,@value2,@value3,@value4)

END
上面代码是我已经写好的,但由于还没完成要求,所以我把未完成的功能用汉字写在中间部分,
如果兄弟们能实现我上面说的功能,本人不仅感谢,还给高分啦。先说声谢谢



 
你说你要做什么就好了,别写那么多东西。
 
--use bankcard_hxb
go
--truncate table tblrptunoin
DECLARE @DATE DATETIME,@item char(4),@item_0 char(1),@ymd char(1),@bank varchar(10),@value1 decimal (9),@value2 decimal(9),@value3 decimal(9),@value4 decimal(9)
Declare @Day int
Declare @Month int
set @value1='251478'
set @value2='24581'
set @value3='3584257'
set @value4='2587412569'
SELECT @DATE = '1999-01-01'
WHILE @DATE < '2002-01-01'
BEGIN
SELECT @DATE = DATEADD(DD, 1, @DATE)
Set @day=Datepart(day,@date)
Set @Month=Datepart(month,@date)
if @month in (1,3,5,7,8,10)
begin
if @day=31
set @ymd='m'
end else
if @month=2
begin
if @day=28 ----此处未判断闰月
set @ymd='m'
end else
if @month in (4,6,9,11)
if @day=30
set @ymd='m'
else
if @month=12 and @day=31
set @ymd='y'
else
set @ymd='d'

-- (1.当@date为月底而不是年底时,@ymd='m',当@date为年底时,@ymd='y',其它@date='d')
-- (2. @bank的值要求从另一表tblbank字段bankno取出,一个值取出几次无要求)
-- (3.@item的值也为tblitem字段itemno的值,与上一样同样取值, 但当@item=(0101或2014或3547...)等一类值时,@item_0=1
-- 当@item=(2547或2514..)等一类时,@item_0=2,当@item=(2142或5847..)等一类值时,@item_0=3,@item=其他数时,item_0=4)
select @bank=bankno from tblbank --where 条件自己加

select @item=case when itemno in( 0101,2014,3547) then 1
when itemno in( 2547,2514) then 2
when itemno in( 2142,5847) then 3
else 4
end
from tblitem-- where 条件自己加


set @value1=@value1+15
set @value2=@value2-26
set @value3=@value3+80
set @value4=@value4-13

INSERT INTO tblrptunoin(DATE,item,item_0,ymd,bank,value1,value2,value3,value4) VALUES(@DATE,@item,@item_0,@ymd,@bank,@value1,@value2,@value3,@value4)

END

 
兄弟,谢谢你,呆会给你两百分。不过现在还是有点问题。
@item的值也为tblitem字段itemno的值,是当@item=(0101或2014或3547...)等一类值时,@item_0=1而不是@item=1,下同
当@item=(2547或2514..)等一类值时,@item_0=2,当@item=(2142或5847..)等一类值时,@item_0=3,@item=其他数时,item_0=4)

 
另一贴:求月底?
应该解决了。
 
--加過程Days 用來調用
CREATE Proc Days

@iYear Int,
@iMonth Int,
@DaysOfMonth Int OutPut
As
Set DateFormat MDY

If @iMonth = 12
Begin
Set @iYear = @iYear + 1
Set @iMonth = 1
End
Else
Set @iMonth = @iMonth + 1

Set @DaysOfMonth = Day(Convert(SmallDateTime, Cast(@iMonth As Char(2)) + '/01/' + Cast(@iYear As Char(4)) , 101) - 1)






use bankcard_hxb
go
truncate table tblrptunoin
DECLARE @DATE DATETIME,@item char(4),@item_0 char(1),@ymd char(1),@bank varchar(10),@value1 decimal (9),@value2 decimal(9),@value3 decimal(9),@value4 decimal(9)

Declare @iY Int
Declare @iM Int
Declare @iD Int

set @value1='251478'
set @value2='24581'
set @value3='3584257'
set @value4='2587412569'
SELECT @DATE = '1999-01-01'
WHILE @DATE < '2002-01-01'
BEGIN
SELECT @DATE = DATEADD(DD, 1, @DATE)

--**************
Select @iY = Year(@Date)
Select @iM = Month(@Date)
Select @iD = Day(@Date)

If @iM = 12 And @iD = 31
Select @ymd = 'y'
Else
Begin
Exec Days @iY, @iM, @iD OutPut
If Day(@Date) = @iD
Select @ymd = 'm'
Else
Select @ymd = 'd'
End

Select @bank = bankno From tblbank Where ...
Select @item = itemno From tblitem Where ...

Case
When @item In('0101', '2014', ...) Then @item_0 = 1
When @item In('2547', '2514', ...) Then @item_0 = 2
When @item In('2142', '5847', ...) Then @item_0 = 3
Else @item_0 = 4
End
--**************

/* (1.当@date为月底而不是年底时,@ymd='m',当@date为年底时,@ymd='y',其它@date='d')
(2. @bank的值要求从另一表tblbank字段bankno取出,一个值取出几次无要求)
(3.@item的值也为tblitem字段itemno的值,与上一样同样取值, 但当@item=(0101或2014或3547...)等一类值时,@item_0=1
当@item=(2547或2514..)等一类时,@item_0=2,当@item=(2142或5847..)等一类值时,@item_0=3,@item=其他数时,item_0=4)
*/

set @value1=@value1+15
set @value2=@value2-26
set @value3=@value3+80
set @value4=@value4-13

INSERT INTO tblrptunoin(DATE,item,item_0,ymd,bank,value1,value2,value3,value4) VALUES(@DATE,@item,@item_0,@ymd,@bank,@value1,@value2,@value3,@value4)

END
 
--加過程Days 用來調用
CREATE Proc Days

@iYear Int,
@iMonth Int,
@DaysOfMonth Int OutPut --任何一個月的最大天數
As
Set DateFormat MDY

If @iMonth = 12
Begin
Set @iYear = @iYear + 1
Set @iMonth = 1
End
Else
Set @iMonth = @iMonth + 1

Set @DaysOfMonth = Day(Convert(SmallDateTime, Cast(@iMonth As Char(2)) + '/01/' + Cast(@iYear As Char(4)) , 101) - 1)






use bankcard_hxb
go
truncate table tblrptunoin
DECLARE @DATE DATETIME,@item char(4),@item_0 char(1),@ymd char(1),@bank varchar(10),@value1 decimal (9),@value2 decimal(9),@value3 decimal(9),@value4 decimal(9)

Declare @iY Int
Declare @iM Int
Declare @iD Int

set @value1='251478'
set @value2='24581'
set @value3='3584257'
set @value4='2587412569'
SELECT @DATE = '1999-01-01'
WHILE @DATE < '2002-01-01'
BEGIN
SELECT @DATE = DATEADD(DD, 1, @DATE)

--**************
--此處用﹕
Select @iY = Year(@Date)
Select @iM = Month(@Date)
Select @iD = Day(@Date)

If @iM = 12 And @iD = 31
Select @ymd = 'y'
Else
Begin
Exec Days @iY, @iM, @iD OutPut
If Day(@Date) = @iD
Select @ymd = 'm'
Else
Select @ymd = 'd'
End

Select @bank = bankno From tblbank Where ...
Select @item = itemno From tblitem Where ...

Select @item_0 =
Case
When @item In('0101', '2014', ...) Then 1
When @item In('2547', '2514', ...) Then 2
When @item In('2142', '5847', ...) Then 3
Else 4
End
--**************

/* (1.当@date为月底而不是年底时,@ymd='m',当@date为年底时,@ymd='y',其它@date='d')
(2. @bank的值要求从另一表tblbank字段bankno取出,一个值取出几次无要求)
(3.@item的值也为tblitem字段itemno的值,与上一样同样取值, 但当@item=(0101或2014或3547...)等一类值时,@item_0=1
当@item=(2547或2514..)等一类时,@item_0=2,当@item=(2142或5847..)等一类值时,@item_0=3,@item=其他数时,item_0=4)
*/

set @value1=@value1+15
set @value2=@value2-26
set @value3=@value3+80
set @value4=@value4-13

INSERT INTO tblrptunoin(DATE,item,item_0,ymd,bank,value1,value2,value3,value4) VALUES(@DATE,@item,@item_0,@ymd,@bank,@value1,@value2,@value3,@value4)

END
 
后退
顶部