SQL如果是Else Logic

时间:2018-02-01 11:50:00

标签: sql-server stored-procedures

我有一个具有以下结构的临时表

ID | BookID |Title | Cost |
----------------------------
1  | Test   |1234  | 1234 |

当拾取excel文件时,这是通过我的系统填充的,并且我将此工作表中的所有值放入我的临时表中

我还有另一张桌子,在这个例子中,我将调用我的Specials表格。它与我的临时表具有相同的结构。

ID | BookID |Title  | Cost |
----------------------------
1  | Test   |Mr Men | 4,99 |

我现在正在做的是修改一个基于我的登台表内的数据进行大量计算的过程。对此的典型调用如下所示:

BookTitle = dbo.StagingTable.Title 

我的修正案需要检查我的临时表中的书名是否也在特价表中。如果是,那么我应该带回那些数据而不是我的临时表中的数据。

BookId值在两者中是相同的,我正在做Left Outer Join将它们绑在一起。我所挣扎的是找出正确的语法来做我想做的事。

LEFT OUT JOIN dbo.Specials s on dbo.StagingTable.BookId = s.BookId

有人能指出我正确的方向吗?

以上只是我无法分享的较大过程的小片段。所以如果事情看起来很奇怪,那就是原因。我只是尽我所能帮助更好地解释我的问题。

2 个答案:

答案 0 :(得分:0)

在T-SQL中,你可以这样做:

SELECT * FROM dbo.StagingTable 
WHERE StagingTable.Title 
IN (SELECT Specials.Title FROM dbo.Specials)

获取StagingTableTitle表中也存在Specials的所有行。

答案 1 :(得分:0)

请测试以下SELECT语句

我希望这就是你所需要的

select
staging.ID,
staging.BookID,
Title = case when staging.Title <> isnull(Specials.Title,staging.Title) then Specials.Title else staging.Title end,
staging.Cost
from staging
left outer join Specials on staging.BookID = Specials.BookID