2017-08-11 41 views
0
SELECT 

worksorders.id AS 'Works Order No', 
worksorders.partid AS 'Part No', 
allpartmaster.partdesc AS 'Description', 
worksorders.quantity AS 'Qty', 
wip.wqleft AS 'Qty Rem', 
worksorders.duedate AS 'Due Date', 
worksorders.lateststartdate AS 'Latest Start Date', 
worksorders.kitstatus AS 'Kit Status', 
wip.wopnumber AS 'Op No', 
wip.wmachine AS 'Work Centre', 
wip.wdesc AS 'WC Description', 
wip.wstate as 'Op State', 
(SELECT wstate FROM wip WHERE wip.wona = worksorders.id and wip.wopnumber = (wip.wopnumber - 10)) as 'Prev Op State' 

FROM efacdb.dbo.allpartmaster allpartmaster, efacdb.dbo.wip wip, efacdb.dbo.worksorders worksorders 

WHERE worksorders.id = wip.wona AND allpartmaster.partnum = worksorders.partid AND ((worksorders.status = 'ACTIVE') AND (wip.wstate = 'NS')) 

AND wip.wmachine = 'POLISH' 

ORDER BY worksorders.lateststartdate ASC 

我在查詢時遇到問題,我不確定它是否有可能。我正在返回按10步驟編號的操作,我需要返回以前操作的狀態。這裏的重點線:SQL子查詢其中列=列-10

(SELECT wstate FROM wip WHERE wip.wona = worksorders.id and wip.wopnumber = (wip.wopnumber - 10)) as 'Prev Op State' 

我想借此從父SELECT查詢wopnumber,取10關閉並返回該行的wstate列。

這可能嗎?

+1

測試,我認爲樣本數據和預期的結果將真正幫助解釋你想要做什麼。 –

+4

您應該在子查詢中使用不同的別名,以便您可以引用外部表。您還應該使用ANSI連接 - 自1992年以來,它們一直處於SQL標準之中,是*世紀*之前的四分之一。 –

+0

@Damien_The_Unbeliever舊學校加入顯然有一定的懷舊情緒,有點像聆聽經典搖滾:-) –

回答

0

也許這就是你想要的?

SELECT 

     worksorders.id AS 'Works Order No', 
     worksorders.partid AS 'Part No', 
     allpartmaster.partdesc AS 'Description', 
     worksorders.quantity AS 'Qty', 
     wip.wqleft AS 'Qty Rem', 
     worksorders.duedate AS 'Due Date', 
     worksorders.lateststartdate AS 'Latest Start Date', 
     worksorders.kitstatus AS 'Kit Status', 
     wip.wopnumber AS 'Op No', 
     wip.wmachine AS 'Work Centre', 
     wip.wdesc AS 'WC Description', 
     wip.wstate as 'Op State', 
     app.wstate as 'Prev Op State' 

FROM efacdb.dbo.allpartmaster allpartmaster, efacdb.dbo.wip wip, efacdb.dbo.worksorders worksorders 
    cross apply (SELECT wstate 
        FROM wip wip1 
        WHERE wip1.wona = worksorders.id and wip1.wopnumber = wip.wopnumber - 10) app 

WHERE worksorders.id = wip.wona AND allpartmaster.partnum = worksorders.partid AND ((worksorders.status = 'ACTIVE') AND (wip.wstate = 'NS')) 

AND wip.wmachine = 'POLISH' 

ORDER BY worksorders.lateststartdate ASC 
0

也許是這樣的?

SELECT 
worksorders.id AS [Works Order No], 
worksorders.partid AS [Part No], 
allpartmaster.partdesc AS [Description], 
worksorders.quantity AS [Qty], 
wip.wqleft AS [Qty Rem], 
worksorders.duedate AS [Due Date], 
worksorders.lateststartdate AS [Latest Start Date], 
worksorders.kitstatus AS [Kit Status], 
wip.wopnumber AS [Op No], 
wip.wmachine AS [Work Centre], 
wip.wdesc AS [WC Description], 
wip.wstate as [Op State], 
prevwip.wstate as [Prev Op State] 
FROM efacdb.dbo.allpartmaster allpartmaster 
JOIN efacdb.dbo.wip wip ON (allpartmaster.partnum = worksorders.partid AND wip.wstate = 'NS' AND wip.wmachine = 'POLISH') 
JOIN efacdb.dbo.worksorders worksorders ON (worksorders.id = wip.wona and worksorders.status = 'ACTIVE') 
LEFT JOIN efacdb.dbo.wip prevwip ON (prevwip.wona = wip.wona and prevwip.wopnumber = (wip.wopnumber - 10)) 
ORDER BY worksorders.lateststartdate ASC 

免責聲明:只有在記事本