表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大神指导
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。
select 日期 from A where substring(物料编号,1,4) in (select 参考值 from B )
那个周期的没太看懂。。。这个是前半段取日期的
图片说明](https://img-ask.csdn.net/upload/201706/13/1497338812_7796.png)
update A set lie =
case
when exists(select 周期 from B where B.类型='表' and 物料编号=B.参考值) then (select 周期 from B where B.类型='表' and 物料编号=B.参考值)
when exists(select 周期 from B where B.类型='组' and substring(物料编号,1,3)=B.参考值 and 物料编号<>B.参考值) then (select 周期 from B where B.类型='组' and substring(物料编号,1,3)=B.参考值 and 物料编号<>B.参考值)
when exists(select 周期 from B where B.类型='全部' group by 周期 having count(B.类型) = 1) then (select 周期 from B where B.类型='全部' group by 周期 having count(B.类型) = 1)
else '' end
select * from A