if / case语句使用sql查询问题

时间:2014-01-21 21:45:59

标签: sql sql-server if-statement case

全部, 我正绞尽脑汁试图找出解决这个问题的最佳方法。基本上我想比较两个表并在满足某些条件时插入现有记录的副本 - 例如,如果名为“OrderComplete”的列是“是”或者当前记录在插入表中不存在。我当时想要使用IF语句或CASE,但我仍然坚持使用IF部分 - 以下是我想要运行的两个查询,但是有一段时间编写IF语句。有什么想法或想法吗?

两个查询都在下面工作,但我需要一个查找重复项的条件,如果insert表的项“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

3 个答案:

答案 0 :(得分:0)

我不太清楚我理解你的整个问题,但是你不能使用带有IF的EXISTS来完成你需要的东西吗?

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

答案 1 :(得分:0)

我建议使用 MERGE 功能。

您可以设置匹配条件并执行更新/插入/删除作为基于单个集合的操作的一部分。

你可以在这里运行的很好的例子:

http://www.cs.utexas.edu/~cannata/dbms/SQL%20Merge.html

答案 2 :(得分: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中。