表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大神指导
这个SQL Server表更新怎么写
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥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