crrr111 2017-06-12 08:24 采纳率: 100%
浏览 853
已采纳

这个SQL Server表更新怎么写

表A字段 物料编号,日期
表B字段 参考值 , 周期 ,类型(表,组,全部)
要求更新表A,三种情况
1.当物料编号的前三位等于表B中的参考值,表B的类型字段值为组时,表A的日期按照所对应的表B的周期进行更新
2.当物料编号与表B中的参考值一摸一样,表B的类型字段值为表时,表A的日期按照所对应的表B的周期进行更新
3.当物料编号在表B中的参考值找不到匹配,但是存在表B有唯一一条记录类型字段值为全部,则表A的日期按照所对应的表B字段类型为全部的记录的周期进行更新,
例如表A日期为6月12号即select datepart(week,getdate())=24,物料编号为021-00001,表B关联的表为参考值=021 周期=4 类型=组,则表示4周为一个周期,24周所在周期是21-24周,则表A的日期变成第21周的第一天即5月21日,更新表A的日期变成5月21日 这个SQL要怎么写,求SQL大神指导

  • 写回答

4条回答 默认 最新

  • smallerCoder 2017-06-13 07:12
    关注

    REPLACE INTO material(mNo, mDate)
    SELECT mNo, MAKEDATE(
    LEFT(mDate, 4), (WEEKOFYEAR(b.mDate) - IF((WEEKOFYEAR(b.mDate))%b.repeats, (WEEKOFYEAR(b.mDate))%b.repeats, b.repeats) +1)*7 + 1- WEEKDAY(MAKEDATE(
    LEFT(mDate, 4), 1))) AS newDate
    FROM
    (
    SELECT material.*,ch.*
    FROM material, ch
    WHERE (
    LEFT(material.mNo, 3) = ch.refer AND ch.types = 2) OR (material.mNo = ch.refer AND ch.types = 1) OR
    ((
    SELECT COUNT(1)
    FROM ch
    WHERE
    LEFT(mNo,3) =
    LEFT(ch.refer,3))=0 AND (
    SELECT COUNT(1)
    FROM ch
    WHERE types=3)=1 AND ch.types = 3))b
    表结构:CREATE TABLE material(mNo int primary key, mDate date not null);
    CREATE TABLE chss(refer varchar(10) , repeats int , types int not null);

    types字段1为表,2为组,3为all。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog