求一存储过程!

时间:2021-04-20 11:53:13

求一存储过程:
XSTD表:XSTD_SHDKH(客户编号),XSTD_TDLS(提单流水号), XSTD_DJRQ(日期),
XSTDMX表:XSTDMX_TDLS(提单流水号),XSTDMX_ZSL(本日销售量),XSTDMX_BHSE(本日应收款)

XSFP表:xsfp_shdkh(客户编号),xsfp_fpls(发票流水),xsfp_djrq(日期)
XSFPMX表:XSFPMX_hkbz(回款标志为0),xsfpmx_fpls(发票流水),xsfpmx_c2(开票日期)xsfpmx_bhke(本日实收款)
if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款 else 二个月到期未付款 
未付款为:XSTDMX_BHSE-xsfpmx_bhke
形成表格
客户名称  一个月到期未付款 二个月到期未付款 
0101         230000.00       2300000.00
回款标志为0的为欠款的!

31 个解决方案

#1


还差
zwwldw表 zwwldw_dwbh(客户编号),zwwldw_dwmc(客户名称)
XSTD_SHDKH(客户编号)与zwwldw_dwbh(客户编号)与xsfp_shdkh(客户编号)对应
XSTD_TDLS(提单流水号)与XSTDMX_TDLS(提单流水号)对应
xsfp_fpls(发票流水)与xsfpmx_fpls(发票流水)对应

#2


好多表,最好能給點數據,另外給出的數據最好能包含你所有可能出現的情況。

#3


只告诉我
if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款 else 二个月到期未付款 
怎么写就可以!其他我自己解决

#4


hongrisoft(求知者) ( ) 信誉:100    Blog   加为好友  2007-05-06 14:29:55  得分: 0  
 
 
   只告诉我
if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款 else 二个月到期未付款 
怎么写就可以!其他我自己解决
  
 
-------------

暈,關鍵就是沒有數據,看上面的分析,我也看不出“一个月到期未付款”是怎麼計算的。

大概的代碼是這樣的。


Select
A.客户名称,
SUM(Case When DateDiff(mm, @输入日期, 开票日期) < 1 Then ... Else 0 End) As 一个月到期未付款,
SUM(Case When DateDiff(mm, @输入日期, 开票日期) >= 1 Then ... Else 0 End) As 二个月到期未付款
From
zwwldw A
Inner Join
...
On ...
Group By
A.客户名称


省略號中的代碼需要你自己補充。

#5


日期格式不对!我的日期格式是字符串 char(8) 如:20070404

#6


hongrisoft(求知者) ( ) 信誉:100    Blog   加为好友  2007-05-06 14:47:46  得分: 0  
 
 
   日期格式不对!我的日期格式是字符串 char(8) 如:20070404
  
 
-----------
只要你的字符串的格式沒有問題,一樣可以比較的。

eg:

Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
Select DateDiff(mm, @输入日期, GetDate())

#7


select d.zwwldw_dwmc as 客户名称,sum(a.XSTDMX_BHSE) as 应收款,sum(c.xsfpmx_bhke) as 回收款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS) 
      inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS) 
      inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0' group by d.zwwldw_dwmc
结果为:
  客户名称                     应收款           回收款
中国华电工程(集团)有限公司 700000.0 280000.0
中冶华天工程技术有限公司   324000.0   108000.0

Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
Select DateDiff(mm, @输入日期, GetDate())
?????
求:if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款(应收款-回收款) else 二个月到期未付款 (应收款-回收款)

一个月未到为:
应收款-回收款

#8


try


Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, @输入日期, 开票日期) < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, @输入日期, 开票日期) >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS) 
      inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS) 
      inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where 
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0' 
group by d.zwwldw_dwmc

#9


select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, '20070404', c.XSFPMX_C2) < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, '20070404', c.XSFPMX_C2) >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc
查询结果为:
*八一钢铁集团有限责任公司 3140150.0 0.0
*华电昌吉热电二期有限责任公司 564000.0 0.0
新浦化学工业(泰兴)有限公司 335640.0 0.0
新泰正大焦化有限公司 145200.0 0.0
邢台钢铁有限责任公司 2981105.0 0.0


开票日期c.XSFPMX_C2 为20070101 和20070401 结果不对!
‘20070404’-‘20070401’〈一个月 应该去最后四位判断吧!

#10



开票日期c.XSFPMX_C2 为20070101 和20070401 结果不对!
‘20070404’-‘20070401’〈一个月 应该去最后四位判断吧!

------------
你沒看懂這個例子

Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
Select DateDiff(mm, @输入日期, GetDate())


它實際是轉換為Datetime做比較的。

#11


--上面的有點理解錯誤,再試試這個

select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc

#12


我把GetDate()我数据表中为c.XSFPMX_C2(已经全修改为‘20070104’)
这样DateDiff(mm, '20070404', c.XSFPMX_C2) >= 1 没查询出来

#13


hongrisoft(求知者) ( ) 信誉:100    Blog   加为好友  2007-05-06 15:36:43  得分: 0  
 
 
   我把GetDate()我数据表中为c.XSFPMX_C2(已经全修改为‘20070104’)
这样DateDiff(mm, '20070404', c.XSFPMX_C2) >= 1 没查询出来
  
 
---------
這麼查詢

DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 



開始寫的語句有問題,用剛寫的那個

#14


呵呵,老大和我想的一样!我试了下,不对!我又查了下,知道原因了
示例
此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
结果是天数
我们用的是1天,用30我试了下对!不过问题又出来了,并不是每个月都是30天啊

#15


我们用的是1天

-------
我用的不是1天比較,而是用1個月做比較的。

指定的參數是mm

DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 

試下這個,看看結果

select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc

#16


不对
我用
sum(Case When DateDiff(mm, '20070404',c.XSFPMX_C2) < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2,'20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
试也不对!
c.XSFPMX_C2为:'20070325' 结果为:
*八一钢铁集团有限责任公司 3140150.0 3140150.0
*华电昌吉热电二期有限责任公司 564000.0 564000.0
新浦化学工业(泰兴)有限公司 335640.0 335640.0
新泰正大焦化有限公司 145200.0 145200.0
邢台钢铁有限责任公司 2981105.0 2981105.0
张家港沙洲电力有限公司 1986208.0 1986208.0

#17


貼點測試數據,以及你要的結果出來,我來測試下看看問題出在哪。

我這裡是將'20070404'放在後面的,應該沒有問題的。

sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款

#18


当 XSFPMX_C2='20070325'时:
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
查询结果:
*八一钢铁集团有限责任公司 0.0 3140150.0
*华电昌吉热电二期有限责任公司 0.0 564000.0
新浦化学工业(泰兴)有限公司 0.0 335640.0
新泰正大焦化有限公司 0.0 145200.0
邢台钢铁有限责任公司 0.0 2981105.0
而用day查询就对!为什么???
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
结果:
*八一钢铁集团有限责任公司 3140150.0 0.0
*华电昌吉热电二期有限责任公司 564000.0 0.0
新浦化学工业(泰兴)有限公司 335640.0 0.0
新泰正大焦化有限公司 145200.0 0.0
邢台钢铁有限责任公司 2981105.0 0.0

#19


呵呵,老板说了,就按天来算了!一个月30天!呵呵!~我终于解脱了!

#20


DateDiff(mm, c.XSFPMX_C2, '20070404') < 1

再想想你的需求,這麼判斷的確有些問題

比如這個

Select DateDiff(mm, '20070301', '20070430')

實際它們的間隔是1個月,但是按照你的要求應該是大於一個月。


改用天數可能的確是更符合你的要求。

#21


DateDiff(mm, c.XSFPMX_C2, '20070404') < 1
放在存储过程里面执行可以!但是用的时候报转换成datetime 出错

#22


如果報錯,說明的傳入的字符串不符合時間格式,比如傳入"20070230",這樣就會報錯,這個是你傳入的字符串的問題,而不是存儲過程的問題.

#23


是因为在存储过程当中含有(DateDiff(mm, c.XSFPMX_C2, '20070404') < 1
)的不允许动态创建表
我原来的是:
select  
d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') < 30 Then a.XSTDMX_BHSE 

- c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') >= 30 Then 

a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
into smsaaa(出错误了!)
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc,d.zwwldw_dwbh

select 

d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_da

y,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.

sms2
from smsi as d  left join smsaaa as a on a.zwwldw_dwbh=d.zwwldw_dwbh
上面的into smsaaa(出错误了!)
现在修改为:
select d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2
from smsi as d  left join
(select  
d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc,d.zwwldw_dwbh) as a on a.zwwldw_dwbh=d.zwwldw_dwbh
可以了!
谢谢老大了!我给老大的msn发了个邮件!老大是*人?打字是繁体?

#24


報的錯誤是什麼?按道理應該沒有問題的。

#25


Mark!

#26


http://community.csdn.net/Expert/topic/5513/5513571.xml?temp=.6879541
大家帮帮我,看一下我的贴子

#27


该回复被版主删除

#28


该回复被版主删除

#29


女上司对我特别照顾,可我是个结过婚的人,我该怎么办?

http://community.csdn.net/Expert/topic/5515/5515498.xml?temp=.4312403

#30



IF EXISTS (SELECT * FROM sysobjects 
         WHERE name = 'SP_TEST' AND type = 'P')
   DROP PROCEDURE SP_TEST
GO
substring()
CREATE PROCEDURE SP_TEST(@date char(8),@dqbh char(20))
AS
begin

if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsa]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsb]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsc]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsaa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsaa]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsbb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsbb]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smscc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smscc]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsd]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsd]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smse]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smse]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsf]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsf]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsg]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsg]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsh]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsh]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsi]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsi]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsaaa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsaaa]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsbbb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsbbb]
/*日报表smsc*/
select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(a.xstdmx_zsl) as xstdmx_zsl_day,
sum(a.xstdmx_bhse) as xstdmx_bhse_day into smsa
from ((xstdmx as a  inner join xstd as b ON a.xstdmx_tdls = b.xstd_tdls) left join zwwldw as z on z.zwwldw_dwbh=b.XSTD_SHDKH)
 inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where b.xstd_djrq=@date group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(c.xshk_bhke) as xshk_bhke_day into smsb
from (xshk as c inner join zwwldw as z on z.zwwldw_dwbh=c.xshk_shdkh) inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where c.xshk_djrq=@date group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select a.zwdqzd_dqmc,a.zwwldw_dqbh,a.zwwldw_dwbh,a.zwwldw_dwmc,a.xstdmx_zsl_day,a.xstdmx_bhse_day,b.xshk_bhke_day into smsc
from smsa as a left join smsb as b on b.zwwldw_dwbh=a.zwwldw_dwbh

insert into smsc select b.zwdqzd_dqmc,b.zwwldw_dqbh,b.zwwldw_dwbh,b.zwwldw_dwmc,a.xstdmx_zsl_day,a.xstdmx_bhse_day,b.xshk_bhke_day
from smsb as b left join smsa as a on b.zwwldw_dwbh=a.zwwldw_dwbh where b.zwwldw_dwbh not in (select zwwldw_dwbh from smsc)


/*月报表smscc*/
select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(a.xstdmx_zsl) as xstdmx_zsl_m,
sum(a.xstdmx_bhse) as xstdmx_bhse_m into smsaa
from ((xstdmx as a  inner join xstd as b ON a.xstdmx_tdls = b.xstd_tdls) left join zwwldw as z on z.zwwldw_dwbh=b.XSTD_SHDKH)
 inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where b.xstd_djrq<=@date and b.xstd_djrq>=Left(@date,6)+'01'  group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(c.xshk_bhke) as xshk_bhke_m into smsbb
from (xshk as c inner join zwwldw as z on z.zwwldw_dwbh=c.xshk_shdkh) inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where c.xshk_djrq<=@date  and c.xshk_djrq>=Left(@date,6)+'01' group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select a.zwdqzd_dqmc,a.zwwldw_dqbh,a.zwwldw_dwbh,a.zwwldw_dwmc,a.xstdmx_zsl_m,a.xstdmx_bhse_m,b.xshk_bhke_m into smscc
from smsaa as a left join smsbb as b on b.zwwldw_dwbh=a.zwwldw_dwbh

insert into smscc select b.zwdqzd_dqmc,b.zwwldw_dqbh,b.zwwldw_dwbh,b.zwwldw_dwmc,a.xstdmx_zsl_m,a.xstdmx_bhse_m,b.xshk_bhke_m
from smsbb as b left join smsaa as a on b.zwwldw_dwbh=a.zwwldw_dwbh where b.zwwldw_dwbh not in (select zwwldw_dwbh from smscc)

/*合并日报表和月报表smsd*/
select cc.zwdqzd_dqmc,cc.zwwldw_dqbh,cc.zwwldw_dwbh,cc.zwwldw_dwmc,c.xstdmx_zsl_day,c.xstdmx_bhse_day,c.xshk_bhke_day,
cc.xstdmx_zsl_m,cc.xstdmx_bhse_m,cc.xshk_bhke_m into smsd
from smscc as cc left join smsc as c on c.zwwldw_dwbh=cc.zwwldw_dwbh

/*合同应收款smse*/
select hmhtgy_dwbh,hmhtgy_htje into smse
from hmhtgy where hmhtgy_qdrq<=@date



/*合并日报表和月报表后加入合同应收款smsf*/
select d.zwdqzd_dqmc,d.zwwldw_dqbh,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,h.hmhtgy_htje into smsf
from smsd as d  left join smse as h on h.hmhtgy_dwbh=d.zwwldw_dwbh

/*合同实收款*/
select f.xsfp_shdkh,sum(x.xsfpmx_bhke) as xsfpmx_bhke into smsg
from xsfpmx as x inner join xsfp as f on f.xsfp_fpls=x.xsfpmx_fpls where xsfp_djrq<=@date group by f.xsfp_shdkh

/*合同余额smsh*/
select e.hmhtgy_dwbh,(e.hmhtgy_htje-g.xsfpmx_bhke) htye into smsh
from smse as e left join smsg as g on g.xsfp_shdkh=e.hmhtgy_dwbh

/*smsf加入余额*/
select d.zwdqzd_dqmc,d.zwwldw_dqbh,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,h.htye into smsi
from smsf as d  left join smsh as h on h.hmhtgy_dwbh=d.zwwldw_dwbh



#31


/*smsaaa加入余未付款*/
select d.zwwldw_dqbh,d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2 into smsaaa
from smsi as d  left join
(select  
d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc,d.zwwldw_dwbh) as a on a.zwwldw_dwbh=d.zwwldw_dwbh
order by d.zwwldw_dqbh,d.zwwldw_dwbh

select a.zwdqzd_dqbh,a.zwdqzd_dqmc,a.zwwldw_dwbh,a.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2 into smsbbb
from 
(select  
w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from (((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH)
inner join zwdqzd as w on w.zwdqzd_dqbh=d.zwwldw_dqbh
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwmc,d.zwwldw_dwbh) as a left join smsi as d on d.zwwldw_dwbh=a.zwwldw_dwbh
order by a.zwdqzd_dqbh,a.zwwldw_dwbh

insert into smsaaa(zwwldw_dqbh,zwdqzd_dqmc,zwwldw_dwbh,zwwldw_dwmc,xstdmx_zsl_day,xstdmx_bhse_day,xshk_bhke_day,
xstdmx_zsl_m,xstdmx_bhse_m,xshk_bhke_m,hmhtgy_htje,htye,sms1,sms2)
 select  d.zwdqzd_dqbh,d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,d.sms1,d.sms2
from smsbbb as d where  1=1 and d.zwwldw_dwbh not in (select zwwldw_dwbh from smsaaa)

if  @dqbh <> ''
begin
  select * from smsaaa where 1=1 and zwwldw_dqbh = @dqbh order by zwwldw_dqbh,zwdqzd_dqmc,zwwldw_dwbh 
end
else
  select * from smsaaa order by zwwldw_dqbh,zwdqzd_dqmc,zwwldw_dwbh

end

GO
动态生成数据窗口失败!从字符串转换为datetime时发生语法错误

#32


運行這個語句,將非法的日期找出來,手動修改掉

Select * From XSFPMX  Where IsDate(XSFPMX_C2) = 0

#33


select a.zwdqzd_dqbh,a.zwdqzd_dqmc,a.zwwldw_dwbh,a.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2 into smsbbb
from
(select
w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from (((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH)
inner join zwdqzd as w on w.zwdqzd_dqbh=d.zwwldw_dqbh
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwmc,d.zwwldw_dwbh) as a left join smsi as d on d.zwwldw_dwbh=a.zwwldw_dwbh
order by a.zwdqzd_dqbh,a.zwwldw_dwbh
这个出的问题

#1


还差
zwwldw表 zwwldw_dwbh(客户编号),zwwldw_dwmc(客户名称)
XSTD_SHDKH(客户编号)与zwwldw_dwbh(客户编号)与xsfp_shdkh(客户编号)对应
XSTD_TDLS(提单流水号)与XSTDMX_TDLS(提单流水号)对应
xsfp_fpls(发票流水)与xsfpmx_fpls(发票流水)对应

#2


好多表,最好能給點數據,另外給出的數據最好能包含你所有可能出現的情況。

#3


只告诉我
if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款 else 二个月到期未付款 
怎么写就可以!其他我自己解决

#4


hongrisoft(求知者) ( ) 信誉:100    Blog   加为好友  2007-05-06 14:29:55  得分: 0  
 
 
   只告诉我
if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款 else 二个月到期未付款 
怎么写就可以!其他我自己解决
  
 
-------------

暈,關鍵就是沒有數據,看上面的分析,我也看不出“一个月到期未付款”是怎麼計算的。

大概的代碼是這樣的。


Select
A.客户名称,
SUM(Case When DateDiff(mm, @输入日期, 开票日期) < 1 Then ... Else 0 End) As 一个月到期未付款,
SUM(Case When DateDiff(mm, @输入日期, 开票日期) >= 1 Then ... Else 0 End) As 二个月到期未付款
From
zwwldw A
Inner Join
...
On ...
Group By
A.客户名称


省略號中的代碼需要你自己補充。

#5


日期格式不对!我的日期格式是字符串 char(8) 如:20070404

#6


hongrisoft(求知者) ( ) 信誉:100    Blog   加为好友  2007-05-06 14:47:46  得分: 0  
 
 
   日期格式不对!我的日期格式是字符串 char(8) 如:20070404
  
 
-----------
只要你的字符串的格式沒有問題,一樣可以比較的。

eg:

Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
Select DateDiff(mm, @输入日期, GetDate())

#7


select d.zwwldw_dwmc as 客户名称,sum(a.XSTDMX_BHSE) as 应收款,sum(c.xsfpmx_bhke) as 回收款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS) 
      inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS) 
      inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0' group by d.zwwldw_dwmc
结果为:
  客户名称                     应收款           回收款
中国华电工程(集团)有限公司 700000.0 280000.0
中冶华天工程技术有限公司   324000.0   108000.0

Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
Select DateDiff(mm, @输入日期, GetDate())
?????
求:if 输入日期(日期格式20070404 char(8))-xsfpmx_c2(开票日期) <一个月 then
一个月到期未付款(应收款-回收款) else 二个月到期未付款 (应收款-回收款)

一个月未到为:
应收款-回收款

#8


try


Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, @输入日期, 开票日期) < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, @输入日期, 开票日期) >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS) 
      inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS) 
      inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where 
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0' 
group by d.zwwldw_dwmc

#9


select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, '20070404', c.XSFPMX_C2) < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, '20070404', c.XSFPMX_C2) >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc
查询结果为:
*八一钢铁集团有限责任公司 3140150.0 0.0
*华电昌吉热电二期有限责任公司 564000.0 0.0
新浦化学工业(泰兴)有限公司 335640.0 0.0
新泰正大焦化有限公司 145200.0 0.0
邢台钢铁有限责任公司 2981105.0 0.0


开票日期c.XSFPMX_C2 为20070101 和20070401 结果不对!
‘20070404’-‘20070401’〈一个月 应该去最后四位判断吧!

#10



开票日期c.XSFPMX_C2 为20070101 和20070401 结果不对!
‘20070404’-‘20070401’〈一个月 应该去最后四位判断吧!

------------
你沒看懂這個例子

Declare @输入日期 Char(8)
Select @输入日期 = '20070404'
Select DateDiff(mm, @输入日期, GetDate())


它實際是轉換為Datetime做比較的。

#11


--上面的有點理解錯誤,再試試這個

select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc

#12


我把GetDate()我数据表中为c.XSFPMX_C2(已经全修改为‘20070104’)
这样DateDiff(mm, '20070404', c.XSFPMX_C2) >= 1 没查询出来

#13


hongrisoft(求知者) ( ) 信誉:100    Blog   加为好友  2007-05-06 15:36:43  得分: 0  
 
 
   我把GetDate()我数据表中为c.XSFPMX_C2(已经全修改为‘20070104’)
这样DateDiff(mm, '20070404', c.XSFPMX_C2) >= 1 没查询出来
  
 
---------
這麼查詢

DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 



開始寫的語句有問題,用剛寫的那個

#14


呵呵,老大和我想的一样!我试了下,不对!我又查了下,知道原因了
示例
此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。

USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
结果是天数
我们用的是1天,用30我试了下对!不过问题又出来了,并不是每个月都是30天啊

#15


我们用的是1天

-------
我用的不是1天比較,而是用1個月做比較的。

指定的參數是mm

DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 

試下這個,看看結果

select 
d.zwwldw_dwmc as 客户名称,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where
b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc

#16


不对
我用
sum(Case When DateDiff(mm, '20070404',c.XSFPMX_C2) < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2,'20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
试也不对!
c.XSFPMX_C2为:'20070325' 结果为:
*八一钢铁集团有限责任公司 3140150.0 3140150.0
*华电昌吉热电二期有限责任公司 564000.0 564000.0
新浦化学工业(泰兴)有限公司 335640.0 335640.0
新泰正大焦化有限公司 145200.0 145200.0
邢台钢铁有限责任公司 2981105.0 2981105.0
张家港沙洲电力有限公司 1986208.0 1986208.0

#17


貼點測試數據,以及你要的結果出來,我來測試下看看問題出在哪。

我這裡是將'20070404'放在後面的,應該沒有問題的。

sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款

#18


当 XSFPMX_C2='20070325'时:
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') < 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(mm, c.XSFPMX_C2, '20070404') >= 1 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
查询结果:
*八一钢铁集团有限责任公司 0.0 3140150.0
*华电昌吉热电二期有限责任公司 0.0 564000.0
新浦化学工业(泰兴)有限公司 0.0 335640.0
新泰正大焦化有限公司 0.0 145200.0
邢台钢铁有限责任公司 0.0 2981105.0
而用day查询就对!为什么???
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 一个月到期未付款,
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As 二个月到期未付款
结果:
*八一钢铁集团有限责任公司 3140150.0 0.0
*华电昌吉热电二期有限责任公司 564000.0 0.0
新浦化学工业(泰兴)有限公司 335640.0 0.0
新泰正大焦化有限公司 145200.0 0.0
邢台钢铁有限责任公司 2981105.0 0.0

#19


呵呵,老板说了,就按天来算了!一个月30天!呵呵!~我终于解脱了!

#20


DateDiff(mm, c.XSFPMX_C2, '20070404') < 1

再想想你的需求,這麼判斷的確有些問題

比如這個

Select DateDiff(mm, '20070301', '20070430')

實際它們的間隔是1個月,但是按照你的要求應該是大於一個月。


改用天數可能的確是更符合你的要求。

#21


DateDiff(mm, c.XSFPMX_C2, '20070404') < 1
放在存储过程里面执行可以!但是用的时候报转换成datetime 出错

#22


如果報錯,說明的傳入的字符串不符合時間格式,比如傳入"20070230",這樣就會報錯,這個是你傳入的字符串的問題,而不是存儲過程的問題.

#23


是因为在存储过程当中含有(DateDiff(mm, c.XSFPMX_C2, '20070404') < 1
)的不允许动态创建表
我原来的是:
select  
d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') < 30 Then a.XSTDMX_BHSE 

- c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,'20070404') >= 30 Then 

a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
into smsaaa(出错误了!)
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<='20070404' and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc,d.zwwldw_dwbh

select 

d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_da

y,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.

sms2
from smsi as d  left join smsaaa as a on a.zwwldw_dwbh=d.zwwldw_dwbh
上面的into smsaaa(出错误了!)
现在修改为:
select d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2
from smsi as d  left join
(select  
d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc,d.zwwldw_dwbh) as a on a.zwwldw_dwbh=d.zwwldw_dwbh
可以了!
谢谢老大了!我给老大的msn发了个邮件!老大是*人?打字是繁体?

#24


報的錯誤是什麼?按道理應該沒有問題的。

#25


Mark!

#26


http://community.csdn.net/Expert/topic/5513/5513571.xml?temp=.6879541
大家帮帮我,看一下我的贴子

#27


该回复被版主删除

#28


该回复被版主删除

#29


女上司对我特别照顾,可我是个结过婚的人,我该怎么办?

http://community.csdn.net/Expert/topic/5515/5515498.xml?temp=.4312403

#30



IF EXISTS (SELECT * FROM sysobjects 
         WHERE name = 'SP_TEST' AND type = 'P')
   DROP PROCEDURE SP_TEST
GO
substring()
CREATE PROCEDURE SP_TEST(@date char(8),@dqbh char(20))
AS
begin

if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsa]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsb]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsc]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsaa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsaa]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsbb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsbb]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smscc]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smscc]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsd]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsd]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smse]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smse]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsf]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsf]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsg]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsg]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsh]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsh]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsi]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsi]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsaaa]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsaaa]
if exists (select * from dbo.sysobjects where id = object_id(N'[lc0059999].[smsbbb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [lc0059999].[smsbbb]
/*日报表smsc*/
select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(a.xstdmx_zsl) as xstdmx_zsl_day,
sum(a.xstdmx_bhse) as xstdmx_bhse_day into smsa
from ((xstdmx as a  inner join xstd as b ON a.xstdmx_tdls = b.xstd_tdls) left join zwwldw as z on z.zwwldw_dwbh=b.XSTD_SHDKH)
 inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where b.xstd_djrq=@date group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(c.xshk_bhke) as xshk_bhke_day into smsb
from (xshk as c inner join zwwldw as z on z.zwwldw_dwbh=c.xshk_shdkh) inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where c.xshk_djrq=@date group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select a.zwdqzd_dqmc,a.zwwldw_dqbh,a.zwwldw_dwbh,a.zwwldw_dwmc,a.xstdmx_zsl_day,a.xstdmx_bhse_day,b.xshk_bhke_day into smsc
from smsa as a left join smsb as b on b.zwwldw_dwbh=a.zwwldw_dwbh

insert into smsc select b.zwdqzd_dqmc,b.zwwldw_dqbh,b.zwwldw_dwbh,b.zwwldw_dwmc,a.xstdmx_zsl_day,a.xstdmx_bhse_day,b.xshk_bhke_day
from smsb as b left join smsa as a on b.zwwldw_dwbh=a.zwwldw_dwbh where b.zwwldw_dwbh not in (select zwwldw_dwbh from smsc)


/*月报表smscc*/
select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(a.xstdmx_zsl) as xstdmx_zsl_m,
sum(a.xstdmx_bhse) as xstdmx_bhse_m into smsaa
from ((xstdmx as a  inner join xstd as b ON a.xstdmx_tdls = b.xstd_tdls) left join zwwldw as z on z.zwwldw_dwbh=b.XSTD_SHDKH)
 inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where b.xstd_djrq<=@date and b.xstd_djrq>=Left(@date,6)+'01'  group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc,sum(c.xshk_bhke) as xshk_bhke_m into smsbb
from (xshk as c inner join zwwldw as z on z.zwwldw_dwbh=c.xshk_shdkh) inner join zwdqzd as w on w.zwdqzd_dqbh=z.zwwldw_dqbh
where c.xshk_djrq<=@date  and c.xshk_djrq>=Left(@date,6)+'01' group by w.zwdqzd_dqmc,z.zwwldw_dqbh,z.zwwldw_dwbh,z.zwwldw_dwmc

select a.zwdqzd_dqmc,a.zwwldw_dqbh,a.zwwldw_dwbh,a.zwwldw_dwmc,a.xstdmx_zsl_m,a.xstdmx_bhse_m,b.xshk_bhke_m into smscc
from smsaa as a left join smsbb as b on b.zwwldw_dwbh=a.zwwldw_dwbh

insert into smscc select b.zwdqzd_dqmc,b.zwwldw_dqbh,b.zwwldw_dwbh,b.zwwldw_dwmc,a.xstdmx_zsl_m,a.xstdmx_bhse_m,b.xshk_bhke_m
from smsbb as b left join smsaa as a on b.zwwldw_dwbh=a.zwwldw_dwbh where b.zwwldw_dwbh not in (select zwwldw_dwbh from smscc)

/*合并日报表和月报表smsd*/
select cc.zwdqzd_dqmc,cc.zwwldw_dqbh,cc.zwwldw_dwbh,cc.zwwldw_dwmc,c.xstdmx_zsl_day,c.xstdmx_bhse_day,c.xshk_bhke_day,
cc.xstdmx_zsl_m,cc.xstdmx_bhse_m,cc.xshk_bhke_m into smsd
from smscc as cc left join smsc as c on c.zwwldw_dwbh=cc.zwwldw_dwbh

/*合同应收款smse*/
select hmhtgy_dwbh,hmhtgy_htje into smse
from hmhtgy where hmhtgy_qdrq<=@date



/*合并日报表和月报表后加入合同应收款smsf*/
select d.zwdqzd_dqmc,d.zwwldw_dqbh,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,h.hmhtgy_htje into smsf
from smsd as d  left join smse as h on h.hmhtgy_dwbh=d.zwwldw_dwbh

/*合同实收款*/
select f.xsfp_shdkh,sum(x.xsfpmx_bhke) as xsfpmx_bhke into smsg
from xsfpmx as x inner join xsfp as f on f.xsfp_fpls=x.xsfpmx_fpls where xsfp_djrq<=@date group by f.xsfp_shdkh

/*合同余额smsh*/
select e.hmhtgy_dwbh,(e.hmhtgy_htje-g.xsfpmx_bhke) htye into smsh
from smse as e left join smsg as g on g.xsfp_shdkh=e.hmhtgy_dwbh

/*smsf加入余额*/
select d.zwdqzd_dqmc,d.zwwldw_dqbh,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,h.htye into smsi
from smsf as d  left join smsh as h on h.hmhtgy_dwbh=d.zwwldw_dwbh



#31


/*smsaaa加入余未付款*/
select d.zwwldw_dqbh,d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2 into smsaaa
from smsi as d  left join
(select  
d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from ((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by d.zwwldw_dwmc,d.zwwldw_dwbh) as a on a.zwwldw_dwbh=d.zwwldw_dwbh
order by d.zwwldw_dqbh,d.zwwldw_dwbh

select a.zwdqzd_dqbh,a.zwdqzd_dqmc,a.zwwldw_dwbh,a.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2 into smsbbb
from 
(select  
w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from (((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH)
inner join zwdqzd as w on w.zwdqzd_dqbh=d.zwwldw_dqbh
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwmc,d.zwwldw_dwbh) as a left join smsi as d on d.zwwldw_dwbh=a.zwwldw_dwbh
order by a.zwdqzd_dqbh,a.zwwldw_dwbh

insert into smsaaa(zwwldw_dqbh,zwdqzd_dqmc,zwwldw_dwbh,zwwldw_dwmc,xstdmx_zsl_day,xstdmx_bhse_day,xshk_bhke_day,
xstdmx_zsl_m,xstdmx_bhse_m,xshk_bhke_m,hmhtgy_htje,htye,sms1,sms2)
 select  d.zwdqzd_dqbh,d.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,d.sms1,d.sms2
from smsbbb as d where  1=1 and d.zwwldw_dwbh not in (select zwwldw_dwbh from smsaaa)

if  @dqbh <> ''
begin
  select * from smsaaa where 1=1 and zwwldw_dqbh = @dqbh order by zwwldw_dqbh,zwdqzd_dqmc,zwwldw_dwbh 
end
else
  select * from smsaaa order by zwwldw_dqbh,zwdqzd_dqmc,zwwldw_dwbh

end

GO
动态生成数据窗口失败!从字符串转换为datetime时发生语法错误

#32


運行這個語句,將非法的日期找出來,手動修改掉

Select * From XSFPMX  Where IsDate(XSFPMX_C2) = 0

#33


select a.zwdqzd_dqbh,a.zwdqzd_dqmc,a.zwwldw_dwbh,a.zwwldw_dwmc,d.xstdmx_zsl_day,d.xstdmx_bhse_day,d.xshk_bhke_day,
d.xstdmx_zsl_m,d.xstdmx_bhse_m,d.xshk_bhke_m,d.hmhtgy_htje,d.htye,a.sms1,a.sms2 into smsbbb
from
(select
w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwbh,d.zwwldw_dwmc,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) < 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms1,
sum(Case When DateDiff(day, c.XSFPMX_C2,@date) >= 30 Then a.XSTDMX_BHSE - c.xsfpmx_bhke Else 0 End) As sms2
from (((XSTDMX as a inner join XSTD as b on b.XSTD_TDLS=a.XSTDMX_TDLS)
inner join XSFPMX as c on c.XSFPMX_tdls=b.XSTD_TDLS)
inner join zwwldw as d on d.zwwldw_dwbh=b.XSTD_SHDKH)
inner join zwdqzd as w on w.zwdqzd_dqbh=d.zwwldw_dqbh
where b.XSTD_DJRQ<=@date and c.XSFPMX_hkbz='0'
group by w.zwdqzd_dqbh,w.zwdqzd_dqmc,d.zwwldw_dwmc,d.zwwldw_dwbh) as a left join smsi as d on d.zwwldw_dwbh=a.zwwldw_dwbh
order by a.zwdqzd_dqbh,a.zwwldw_dwbh
这个出的问题