首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何动态更改行?

如何动态更改行?
EN

Stack Overflow用户
提问于 2019-03-25 19:23:42
回答 2查看 67关注 0票数 1

我正在设法动态地更改最早日期字段的日期,因此如果TotalShipped = TotalOrdered,那么我想取两个字段不相等的最早日期。

这是数据当前样子的一个例子。

代码语言:javascript
复制
CREATE TABLE mytable (
  fsono INT
  , NAME VARCHAR(30)    
  , TS int
  , [TO] int   
  , [Date] date  
);

INSERT INTO mytable (fsono, NAME, TS, [TO], [Date])
  VALUES
    (1,'039069',1,1,'2019-3-19')
    , (2,'039069',1,1,'2019-3-19')
    , (3,'039069',1,0,'2019-3-20')
    , (4,'039069',1,0,'2019-3-21');

SELECT 
  sorels.fsono,
  sorels.finumber,
  sorels.frelease,
  fshipbook+fshipbuy+fshipmake as totalshipped,
  fjoqty + fbook + fbqty as totalordered,
  sorels.fduedate
FROM m2mdata35.dbo.sorels   
INNER JOIN somast on sorels.fsono=somast.fsono   
INNER JOIN soitem on sorels.fsono=soitem.fsono AND sorels.finumber=soitem.finumber   
LEFT JOIN inmastx on soitem.fpartno=inmastx.fpartno and soitem.fpartrev=inmastx.frev  
LEFT JOIN jomast on sorels.fstatus=jomast.fjobno 
LEFT JOIN slcdpmx on somast.fcustno=slcdpmx.fcustno  
LEFT JOIN syphon ON somast.fcontact=syphon.fcontact AND somast.fcustno=syphon.fcsourceid 
WHERE LEFT(somast.fstatus,1)<>'C' and fsocoord<>'IFP' and fsocoord<>'711' 
and somast.fsono='039069' 
Order By sorels.fsono, sorels.fduedate, sorels.finumber, sorels.frelease

这就是我想要的结果

代码语言:javascript
复制
CREATE TABLE myresults (
  fsono INT 
  , NAME VARCHAR(30)
  , TS int  
  , [TO] int   
  , [Date] date  
  , Earliest_Date date 
);

INSERT INTO myresults (fsono, NAME, TS, [TO], [Date], Earliest_Date)
  VALUES
    (1,'039069',1,1,'2019-3-19','2019-3-20')
    , (2,'039069',1,1,'2019-3-19','2019-3-20')
    , (3,'039069',1,0,'2019-3-20','2019-3-20')
    , (4,'039069',1,0,'2019-3-21','2019-3-20');
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-26 20:21:07

最后,我使用了一个公共表表达式并在该表上加入了该表。

代码语言:javascript
复制
;with cte1 as (
SELECT Distinct 
sorels.fsono,
min(sorels.fduedate ) Over(Partition by sorels.fsono, Case when fshipbook+fshipbuy+fshipmake <> sorels.fjoqty + sorels.fbook + sorels.fbqty then 1 else 0 end ) as EarliestDate 
-----------

FROM m2mdata35.dbo.sorels     
INNER JOIN somast on sorels.fsono=somast.fsono  

WHERE LEFT(somast.fstatus,1)<>'C' 
and fsocoord<>'IFP' and fsocoord<>'711' 
and fshipbook+fshipbuy+fshipmake <> sorels.fjoqty + sorels.fbook + sorels.fbqty
)

select sorels.fsono, sorels.finumber, sorels.frelease,
Case when fshipbook+fshipbuy+fshipmake <> sorels.fjoqty + sorels.fbook + sorels.fbqty then 'T' else 'F' end as BackOrd,
sorels.fduedate, cte1.EarliestDate, 
--/*
sorels.fjoqty ,
sorels.fbqty,
fshipbook+fshipbuy+fshipmake as totalshipped,
sorels.fjoqty + sorels.fbook + sorels.fbqty as totalordered,
inwork.fcpro_id,
inwork.fdept,
soitem.fsource as 'soitem.fsource',
sorels.funetprice,
sorels.fshptoaddr as 'sorels.fshptoaddr',
somast.fshptoaddr as 'somast.fshptoaddr',
syaddr.fccompany,
sorels.fstatus ,
jomast.fjobno,
jomast.fstatus AS 'jomast.fstatus', 
soitem.fenumber,
soitem.fquantity,
sorels.forderqty,   
somast.fcustno,
soitem.fac,
soitem.fpartno,
soitem.fpartrev,
incros.fcrosspart,
somast.fcompany,
slcdpmx.fcusrchr1,
left(somast.fcfname,1) as 'somast.fcfname',
somast.fcontact,
syphon.fctitle,
soitem.fgroup as 'soitem.fgroup',
soitem.fprodcl as 'soitem.fprodcl',
soitem.manualplan,
--inmast.fsource as 'soitem.fsource',
inmast.fgroup AS 'inmast.fgroup',
inmast.fbuyer as 'inmast.fbuyer' ,
inmast.fprodcl as 'inmast.fpodcl',
inmast.fnusrcur1 as 'inmast.fnusrcur1' ,
inmast.fproqty as 'inmast.fproqty',
inmast.fbook as 'inmast.fbook',
inmast.fonhand 'inmast.fonhand',
inmast.frevdt 'inmast.frevdt',   
somast.fshipvia,
cspopup.fcpoptext,
somast.fstatus AS 'somast.fstatus',
somast.fsocoord,
somast.fordername,
somast.fcustpono,
somast.fcusrchr1 AS 'somast.fcusrchr1',
somast.fcusrchr2,
somast.fcusrchr3,
somast.forderdate,
sorels.fpostatus,   
sorels.fshipbook,
sorels.fshipbuy,
sorels.fshipmake,
sorels.fshpbefdue,
sorels.fsplitshp,
soitem.fshipitem,
soitem.fmultiple,
sorels.fstatus as 'sorels.fstatus',
sorels.fshipbook + sorels.fshipbuy + sorels.fshipmake AS 'qtyshipped',
sorels.forderqty - sorels.fshipbook + sorels.fshipbuy + sorels.fshipmake AS 'qtyship', 
jodrtg.fnqty_comp - sorels.fshipbook + sorels.fshipbuy + sorels.fshipmake - jodrtg.fnqty_move AS 'availtoship'
--*/

from sorels 
LEFT JOIN cte1 on sorels.fsono=cte1.fsono 
INNER JOIN soitem on sorels.fsono+sorels.finumber=soitem.fsono+soitem.finumber  
INNER JOIN somast on sorels.fsono=somast.fsono  

--/*
LEFT JOIN cspopup ON 'SHIPVIA             '+somast.fshipvia=cspopup.fcpopkey+cspopup.fcpopval
LEFT JOIN inmast on soitem.fpartno+soitem.fpartrev=inmast.fpartno+inmast.frev 
LEFT JOIN incros on inmast.fpartno+inmast.frev=incros.fpartno+incros.fcpartrev
LEFT JOIN jomast on sorels.fstatus=jomast.fjobno 
LEFT JOIN joitem on jomast.fjobno=joitem.fjobno
LEFT JOIN jodrtg on jomast.fjobno=jodrtg.fjobno 
LEFT JOIN inwork on jodrtg.fpro_id=inwork.fcpro_id
LEFT JOIN slcdpmx on somast.fcustno=slcdpmx.fcustno  
LEFT JOIN syphon ON somast.fcontact=syphon.fcontact AND somast.fcustno=syphon.fcsourceid 
LEFT JOIN syaddr ON 'SLCDPM    '+somast.fcustno+'S'+sorels.fshptoaddr=syaddr.fcalias+syaddr.fcaliaskey+syaddr.fcaddrtype+syaddr.fcaddrkey 
--*/

WHERE LEFT(somast.fstatus,1)<>'C' 
and fsocoord<>'IFP' and fsocoord<>'711' 

Order by cte1.EarliestDate, sorels.fsono, BackOrd, sorels.finumber, sorels.frelease
票数 0
EN

Stack Overflow用户

发布于 2019-03-25 23:54:06

这里有一种方法。

代码语言:javascript
复制
Select  AllData.*,
        earliest.mismatch
from    #mytable    AllData
    left join
        (Select NAME, 
                min(date) mismatch
        from    #mytable
        where   [ts] <> [TO]
        group by
                NAME) earliest         on AllData.Name = earliest.Name
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55345067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档