首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • AB两个表之间将相同数据的B表id写入A表,数据库请看内容
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zi12zi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-19 22:36:51 楼主
    create table Abaofei
    (
    baofei_autoid int identity(1,1) primary key,
    rlzy_name varchar(50),--姓名
    baofei_baofei int,/*金额*/
    baofei_tjdate smalldatetime,/*日期*/
    baofeiFeiyong_autoid varchar(10),---写入baofei_feiyong 的ID
    )
    INSERT Abaofei SELECT '王五',3434,'2005-5-5',null
    INSERT Abaofei SELECT '王五',123556,'2005-5-5',null
    INSERT Abaofei SELECT '赵钱',3434,'2005-5-5',null
    INSERT Abaofei SELECT '赵钱',3434,'2005-5-5',null
    INSERT Abaofei SELECT '赵钱',3434,'2005-5-5',null
    INSERT Abaofei SELECT '张四',6548,'2005-5-5',null

    INSERT Abaofei SELECT '赵华',3434,'2005-5-5',null
    INSERT Abaofei SELECT '李娜',123556,'2005-5-5',null
    INSERT Abaofei SELECT '小亮',3434,'2005-5-5',null
    INSERT Abaofei SELECT '周五',3434,'2005-5-5',null
    INSERT Abaofei SELECT '周五',3434,'2005-5-5',null
    INSERT Abaofei SELECT '小亮',3434,'2005-5-5',null
    INSERT Abaofei SELECT '小亮',6548,'2005-5-5',null
    INSERT Abaofei SELECT '赵钱',3434,'2005-5-5',null

    select * from Abaofei
    create table Abaofei_feiyong
    (
    baofeiFeiyong_autoid int identity(1,1) primary key,
    baofeiFeiyong_jingbanName varchar(20),--姓名
    baofeiFeiyong_baofei int,--金额

    baofeiFeiyong_date datetime,--日期
    )
    INSERT Abaofei_feiyong SELECT '王五',3434,'2005-5-5'
    INSERT Abaofei_feiyong SELECT '王五',123556,'2005-5-5'
    INSERT Abaofei_feiyong SELECT '赵钱',3434,'2005-5-5'
    INSERT Abaofei_feiyong SELECT '赵钱',3434,'2005-5-5'
    INSERT Abaofei_feiyong SELECT '赵钱',3434,'2005-5-5'
    INSERT Abaofei_feiyong SELECT '赵钱',3434,'2005-5-5'
    INSERT Abaofei_feiyong SELECT '张四',6548,'2005-5-5'
    select * from Abaofei_feiyong
    A,B两表。把B表与A表相同的数据的id对应写入A表

    结果为:
    baofei_autoid rlzy_name  baofei_baofei baofei_tjdate          baofeiFeiyong_autoid
    ------------- ----------- ------------- ----------------------- --------------------
    1            王五          3434          2005-05-05 00:00:00    1
    2            王五          123556        2005-05-05 00:00:00    2
    3            赵钱          3434          2005-05-05 00:00:00    3
    4            赵钱          3434          2005-05-05 00:00:00    4
    5            赵钱          3434          2005-05-05 00:00:00    5
    6            张四          6548          2005-05-05 00:00:00    7
    7            赵华          3434          2005-05-05 00:00:00    NULL
    8            李娜          123556        2005-05-05 00:00:00    NULL
    9            小亮          3434          2005-05-05 00:00:00    NULL
    10            周五          3434          2005-05-05 00:00:00    NULL
    11            周五          3434          2005-05-05 00:00:00    NULL
    12            小亮          3434          2005-05-05 00:00:00    NULL
    13            小亮          6548          2005-05-05 00:00:00    NULL
    14            赵钱          3434          2005-05-05 00:00:00    6


    请高手帮助写一下
    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-20 01:18:591楼 得分:0
    SQL code
    UPDATE A SET A.baofeiFeiyong_autoid = B.[baofeiFeiyong_autoid] FROM ( select px=(select count(1) from Abaofei where [rlzy_name] = t.[rlzy_name] and [baofei_autoid] <=t.[baofei_autoid]), * from Abaofei t) A left join ( select px=(select count(1) from Abaofei_feiyong where baofeiFeiyong_autoid <=t.baofeiFeiyong_autoid and baofeiFeiyong_jingbanName = t.[baofeiFeiyong_jingbanName]), * from Abaofei_feiyong t ) B on B.px = A.px and b.[baofeiFeiyong_jingbanName] = a.[rlzy_name] /* px baofei_autoid rlzy_name baofei_baofei baofei_tjdate baofeiFeiyong_autoid baofeiFeiyong_autoid ----------- ------------- -------------------------------------------------- ------------- ----------------------- -------------------- -------------------- 1 1 王五 3434 2005-05-05 00:00:00 NULL 1 2 2 王五 123556 2005-05-05 00:00:00 NULL 2 1 3 赵钱 3434 2005-05-05 00:00:00 NULL 3 2 4 赵钱 3434 2005-05-05 00:00:00 NULL 4 3 5 赵钱 3434 2005-05-05 00:00:00 NULL 5 1 6 张四 6548 2005-05-05 00:00:00 NULL 7 1 7 赵华 3434 2005-05-05 00:00:00 NULL NULL 1 8 李娜 123556 2005-05-05 00:00:00 NULL NULL 1 9 小亮 3434 2005-05-05 00:00:00 NULL NULL 1 10 周五 3434 2005-05-05 00:00:00 NULL NULL 2 11 周五 3434 2005-05-05 00:00:00 NULL NULL 2 12 小亮 3434 2005-05-05 00:00:00 NULL NULL 3 13 小亮 6548 2005-05-05 00:00:00 NULL NULL 4 14 赵钱 3434 2005-05-05 00:00:00 NULL 6 (14 row(s) affected) */
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • andyluohao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 09:31:132楼 得分:0
    我觉得不用那么复杂呢,查询两个表ID相同的数据直接与A表进行外连接,使用UNIQUE去掉重复的键值
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zi12zi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 22:18:543楼 得分:0
    您帮我写的那个sql语句有问题。换一下数据的前后就不正确的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-20 23:04:314楼 得分:0
    引用 2 楼 andyluohao 的回复:
    我觉得不用那么复杂呢,查询两个表ID相同的数据直接与A表进行外连接,使用UNIQUE去掉重复的键值

    呵呵,方式有很多种,我只是随手写了一个而已,
    没有仔细思考 :)

    SQL code
    UPDATE A SET baofeiFeiyong_autoid =( SELECT MIN([baofeiFeiyong_autoid]) FROM Abaofei_feiyong WHERE [baofeiFeiyong_jingbanName] = A.[rlzy_name] ) + A.px - 1 FROM ( select px=(select count(1) from Abaofei where [rlzy_name] = t.[rlzy_name] and [baofei_autoid] <=t.[baofei_autoid]), * from Abaofei t) A
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-21 00:22:115楼 得分:0
    引用 3 楼 zi12zi 的回复:
    您帮我写的那个sql语句有问题。换一下数据的前后就不正确的。

    有什么问题?
    看看4楼的可以不?
    2005里面可以用ROW_NUMBER(),
    不知道你的环境,写的2000的通用的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zi12zi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 21:32:046楼 得分:0
    我是2005还是不对呀。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tianhuo_soft
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 00:48:577楼 得分:0
    引用 6 楼 zi12zi 的回复:
    我是2005还是不对呀。


    2005肯定能兼容2000的这个写法
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-25 23:12:288楼 得分:0
    引用 6 楼 zi12zi 的回复:
    我是2005还是不对呀。

    有什么问题?
    2000都可以,
    2005肯定可以的 :)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zi12zi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 23:17:349楼 得分:0
    我的日期不完全是都是这个日期。换成别的日期就又不行了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zi12zi
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 23:18:2010楼 得分:0
    有QQ号吗。我给你留言了。看到了吗。苦行僧
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved