2014-01-21 18 views
3

全部, 我正在絞盡腦汁,試圖找出解決這個問題的最佳方法。基本上,我想比較兩個表,並在滿足某些條件時插入現有記錄的副本 - 例如名爲「OrderComplete」的列是否爲yes或記錄當前不存在於插入表中。我正在尋找使用IF語句或CASE,但我堅持IF部分 - 下面是我想運行的兩個查詢,但有一段時間寫IF語句。任何想法或想法?如果/ case語句使用sql查詢問題

這兩個查詢都工作得很好,但我需要一個條件來查找重複項,如果插入表的項目「OrderComplete」設置爲yes,則只有副本。我可以放一個簡單的公式,但是想在IF區插入一個SELECT或更復雜的東西。也許你不能比較IF語句中的兩個表,現在只是難倒了。

IF ????? 
BEGIN 
use [PaperDB] 
INSERT INTO dbo.ORDERED_PARTS_TABLE 
     ([OrderPN] 
     ,[OldPN] 
     ,[OldPN2] 
     ,[PartDescription] 
     ,[WhereUsed] 
     ,[LocationStored] 
     ,[LocationDescription] 
     ,[AlternateLocationStored] 
     ,[AlternateLocationDescription] 
     ,[QuantityOnHand] 
     ,[ReorderQuantity] 
     ,[QuantityToOrder] 
     ,[Category] 
     ,[LastUpdated] 
     ,[spare] 
     ,[spare2] 
     ,[spare3]) 
SELECT s.orderpn, s.oldpn, s.oldpn2, s.partdescription, s.whereused, s.locationstored,   
s.locationdescription, s.alternatelocationstored, s.alternatelocationdescription,  
s.quantityonhand, s.reorderquantity, s.reorderquantity - s.QuantityOnHand , s.category,  
s.lastupdated, s.QuantityOnHand , s.ReorderQuantity , s.Spare3 
FROM dbo.PARTS_ORDER_TABLE as s 
LEFT OUTER JOIN 
ORDERED_PARTS_TABLE as t 
on s.OrderPN = t.OrderPN 
WHERE (NOT EXISTS (SELECT * 
      from ORDERED_PARTS_TABLE 
      where s.OrderPN = t.OrderPN)) 
END 
ELSE 
BEGIN 
use [PaperDB] 
INSERT INTO dbo.ORDERED_PARTS_TABLE 
([OrderPN] 
     ,[OldPN] 
     ,[OldPN2] 
     ,[PartDescription] 
     ,[WhereUsed] 
     ,[LocationStored] 
     ,[LocationDescription] 
     ,[AlternateLocationStored] 
     ,[AlternateLocationDescription] 
     ,[QuantityOnHand] 
     ,[ReorderQuantity] 
     ,[QuantityToOrder] 
     ,[Category] 
     ,[LastUpdated] 
     ,[spare] 
     ,[spare2] 
     ,[spare3]) 
SELECT s.orderpn, s.oldpn, s.oldpn2, s.partdescription, s.whereused, s.locationstored, 
s.locationdescription, s.alternatelocationstored, s.alternatelocationdescription, 
s.quantityonhand, s.reorderquantity, s.reorderquantity - s.QuantityOnHand , s.category, 
s.lastupdated, s.QuantityOnHand , s.ReorderQuantity , s.Spare3 
FROM dbo.PARTS_ORDER_TABLE as s 
LEFT OUTER JOIN 
ORDERED_PARTS_TABLE as t 
on s.OrderPN = t.OrderPN 
WHERE s.OrderPN = t.OrderPN AND t.OrderComplete = 'yes' 
END 
+0

我添加了sql-server標記,因爲語法看起來像SQL Server。 –

+0

首先,在'if'之前移動'use'語句。兩個都。 –

+0

如果你使用SQL Server,你可以遵守嗎?如果是的話,你可以遵守什麼版本? – JodyT

回答

0

不太清楚我理解你的整個問題,但是你不能使用帶有IF的EXISTS來完成你所需要的嗎?

IF EXISTS (SELECT * FROM dbo.ORDERED_PARTS_TABLE WHERE whatever='??') THEN 
0

另一種方法可能是兩個表中進行選擇。

Insert into TableC(
    Col1, 
    Col2 
) 
Select 
    a.Col1, 
    a.Col2 
From TableA a 
join TableB b on b.ID = a.ID 
       --expand this to express the full relationship between the tables. 
where a.OrderComplete = 'yes' -- This will give you rows where OrderComplete = Yes 
or b.ID is null -- This will add also return results where TableB is missing rows. 

您將以插入到TableC中的所有內容結束。