首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教怎么写一条SQL语句显示我要的效果? [已结贴,结贴人:chinastorm]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinastorm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-01-16 16:17:16 楼主
      有4张表
      合同表 contract

    contract_id contract_code name
    200700086187 1811 张三
    200700086188 1813 张二
    200700086189 1816 张五
    200700086190 1819 张九

    计划付款表 plan_pay
    pay_plan_code  contract_code plan_date pay_price
    6378 1811 2007-03-22 00:00:00.000 152050.00
    6379 1811 2007-04-30 00:00:00.000 150000.00
    6380 1811 2007-05-30 00:00:00.000 204738.00
    6388 1813 2007-03-22 00:00:00.000 152050.00
    6389 1813 2007-04-30 00:00:00.000 150000.00
    6390 1816 2007-05-30 00:00:00.000 204738.00

    收款计划表 account_plan
    account_plan_code account_code plan_code price
    5609 3923 6378 152050.00
    6026 4154 6379 150000.00
    6025 4237 6380 44738.00

    收款表 account
    account_code account_date account_price
    3923 2007-03-22 00:00:00.000 152050.00
    4154 2007-05-31 00:00:00.000 150000.00
    4237 2007-07-02 00:00:00.000 44738.00

    怎么写一条SQL语句得出对应到期没有付款的合同,逾期几天?
    老大们再帮忙,我想了n长时间没有写出来
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      3

    发表于:2008-01-16 16:18:291楼 得分:10
    先顶再看.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      3

    发表于:2008-01-16 16:19:192楼 得分:0
    给个结果.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      3

    发表于:2008-01-16 16:21:473楼 得分:0
    计划付款表  plan_pay
    收款表  account

    只需要这两个表就行了吧.不说清楚,猜起来真累.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinastorm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:23:574楼 得分:0

    select * from pay_plan where contract_code='1811'

    select * from ACCOUNT_plan where plan_code='6378'
    select * from ACCOUNT_plan where plan_code='6379'
    select * from ACCOUNT_plan where plan_code='6380'

    select * from account where account_code='3923'
    select * from account where account_code='4154'
    select * from account where account_code='4237'
    这个是单个的对应关系
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tim_spac
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:26:325楼 得分:0
    公益事业:
    SQL code
    -- 合同表 create table contract ( contract_id char(12) primary key, contract_code int, name nvarchar(32) ) insert into contract select '200700086187',1811,'张三' union select '200700086188',1813,'张二' union select '200700086189',1816,'张五' union select '200700086190',1819,'张九' -- 计划付款表 create table plan_pay ( pay_plan_code int , contract_code int , plan_date datetime , pay_price money ) insert into plan_pay select 6378, 1811, '2007-03-22',152050.00 union select 6379, 1811, '2007-04-30',150000.00 union select 6380, 1811, '2007-05-30',204738.00 union select 6388, 1813, '2007-03-22',152050.00 union select 6389, 1813, '2007-04-30',150000.00 union select 6390, 1816, '2007-05-30',204738.00 -- 收款计划表 create table account_plan ( account_plan_code int , account_code int, plan_code int, price money ) insert into account_plan select 5609, 3923, 6378, 152050.00 union select 6026, 4154, 6379, 150000.00 union select 6025, 4237, 6380, 44738.00 -- 收款表 create table account ( account_code int , account_date datetime , account_price money ) insert into account select 3923, '2007-03-22',152050.00 union select 4154, '2007-05-31',150000.00 union select 4237, '2007-07-02',44738.00 go
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WangZWang
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:27:256楼 得分:10
    SQL code
    Select a.*,b.pay_price, Datediff(day,b.plan_date,getdate()) as 逾期天数 from contract as a Inner Join plan_pay as b on a.contract_code=b.contract_code inner Join account_plan as c on b.plan_code=c.plan_code Where not exists(Select * from account Where account_code=c.account_code)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinastorm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:28:417楼 得分:0
    结果就是没有交清的显示出来
    contract_id    逾期    已交金额  欠费金额
    200700086187  *天      haveprice  noprice
    *天(现在的时间减去plan_pay 表中的plan_date)

    haveprice  account表中的对应的金额总和
    noprice    contract_code对应的plan_pay 的金额和减去 haveprice 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      3

    发表于:2008-01-16 16:29:298楼 得分:0
    每个人的单条记录还需要对应,麻烦.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Haiwer
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      5

    发表于:2008-01-16 16:30:499楼 得分:10
    SQL code
    select c.contract_id,c.contract_code,c.name, p.plan_date,p.pay_price, datediff(day,p.plan_date,getdate()) as 逾期天 from contract c,plan_pay p where c.contract_code=p.contract_code and p.plan_date<getdate() and not exists ( select 1 from account_plan n,account a where a.account_code=n.account_code and n.plan_code=p.pay_plan_code )
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinastorm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:33:1210楼 得分:0
    是的,每个人的单笔记录没有交清,就显示出逾期最近的时间
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yms_wangxm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:34:1411楼 得分:0
    select c.contract_id,c.contract_code,c.name,
    p.plan_date,p.pay_price,
    datediff(day,p.plan_date,getdate()) as 逾期天
    from contract c,plan_pay p
    where c.contract_code=p.contract_code
    and p.plan_date <getdate()
    and not exists (
        select 1 from account_plan n,account a
        where a.account_code=n.account_code
        and n.plan_code=p.pay_plan_code
        )
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yms_wangxm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:34:5012楼 得分:0
    借用一下 呵呵,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yms_wangxm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:35:5913楼 得分:5
    SQL code
    select c.contract_id,c.contract_code,c.name, p.plan_date,p.pay_price, datediff(day,p.plan_date,getdate()) as 逾期天 from contract c,plan_pay p where c.contract_code=p.contract_code and p.plan_date<getdate() and not exists ( select 1 from account_plan n,account a where a.account_code=n.account_code and n.plan_code=p.pay_plan_code )
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      5

    发表于:2008-01-16 16:36:0114楼 得分:0
    一个合同多次付款 ,有点麻烦,想想
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinastorm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:38:3815楼 得分:0
    楼上几位老大写的有一点点问题,没有把 合同号是1811的欠费显示出来

    这个我觉得比较难,结贴的时候要重新开贴再发送200分,一共300分!
    谢谢老大们!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dawugui
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      3

    发表于:2008-01-16 16:41:5616楼 得分:0
    你把你的结果给出来.说个算法.这样才好搞.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinastorm
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 16:49:3817楼 得分:0
    说实话我不知道怎么算,老板要这样的效果,我没做出来,计划付款表 plan_pay合同号对应的金额和是准备收的总金额,收款计划表 account_plan对应的是已经收的金额,如果没有显示就是没有交钱,逾期就是单笔的,如果有一笔没有交清就是逾期。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • happyflystone
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      5

    发表于:2008-01-16 16:55:2718楼 得分:0
    SQL code
    -- 合同表 create table contract ( contract_id char(12) primary key, contract_code int, name nvarchar(32) ) insert into contract select '200700086187',1811,'张三' union select '200700086188',1813,'张二' union select '200700086189',1816,'张五' union select '200700086190',1819,'张九' -- 计划付款表 create table plan_pay ( pay_plan_code int , contract_code int , plan_date datetime , pay_price money ) insert into plan_pay select 6378, 1811, '2007-03-22',152050.00 union select 6379, 1811, '2007-04-30',150000.00 union select 6380, 1811, '2007-05-30',204738.00 union select 6388, 1813, '2007-03-22',152050.00 union select 6389, 1813, '2007-04-30',150000.00 union select 6390, 1816, '2007-05-30',204738.00 -- 收款计划表 create table account_plan ( account_plan_code int , account_code int, plan_code int, price money ) insert into account_plan select 5609, 3923, 6378, 152050.00 union select 6026, 4154, 6379, 150000.00 union select 6025, 4237, 6380, 44738.00 -- 收款表 create table account ( account_code int , account_date datetime , account_price money ) insert into account select 3923, '2007-03-22',152050.00 union select 4154, '2007-05-31',150000.00 union select 4237, '2007-07-02',44738.00 go select d.*,datediff(day,p.plan_date,getdate()) as 逾期天 from contract d right join (select * from plan_pay c where not exists( select 1 from account_plan a left join account b on a.account_code = b.account_code where a.plan_code = c.pay_plan_code)) p on d.contract_code = p.contract_code drop table contract,plan_pay,account_plan,account /* contract_id contract_code name 逾期天 ------------ ------------- -------------------------------- ----------- 200700086188 1813 张二 300 200700086188 1813 张二 261 200700086189 1816 张五 231 (所影响的行数为 3 行) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tim_spac
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-01-16 17:00:53