SQL SSMS IF THEN在同一字段中具有多个条件

时间:2016-06-29 18:25:33

标签: sql sql-server ssms

我需要从表中提取交易记录,如果它是类型'C'并且记录发布时间大于或等于类型为'W'的记录的发布时间,其中帐号和发布日期是相同。我正在努力创建一个if / then,其中类型'C'>的发布时间=类型'W'的posttime ...任何帮助将不胜感激。我之前已经完成了这些类型,但从来没有用过只有一个记录项不同的字段。

3 个答案:

答案 0 :(得分:1)

这是使用exists的典型方法:

select * from transactions t
where t.actioncode = 'C' and exists (
    select 1 from transactions t2
    where   t2.account_num = t.account_num and t2.postdate = t1.postdate
        and t2.actioncode = 'W'
        and t2.posttime < t1.posttime
)

答案 1 :(得分:0)

这是我原来的,但它只是在没有结果的SSMS中搅动。基本上,我只需要返回所有'C'类型的记录,其中有一个'W'类型的记录,其中的邮政时间小于'C',但记录的帐号和后期是相同的。 posttime,postdate,type和number是我表格中的所有字段。

SELECT *

FROM TRANSACTIONS

WHTION ACTIONCODE ='C'和POSTTIME&gt; = POSTTIME和ACTIONCODE ='W'

答案 2 :(得分:0)

如果我理解正确,您所描述的内容可以通过JOINS完成。 想一想relational data setsSARGs

虽然你还没有给我们一个表格结构(这有很大帮助),但解决方案可以帮助你引导你朝着正确的方向前进。以下假定FACT TRANSACTIONS表为carnality,其中SELECT TOP 1000 A.ACTIONCODE, A.TRAN_RECORD --, any other needed columns FROM TRANSACTIONS A INNER JOIN (SELECT ACTIONCODE, POSTTIME, ACCOUNT_NUM, POSTDATE FROM TRANSACTIONS WHERE ACTIONCODE = 'W') B ON A.ACCOUNT_NUM = B.ACCOUNT_NUM AND A.POSTDATE = B.POSTDATE WHERE A.ACTIONCODE = 'C' AND A.POSTTIME >= B.POSTTIME 本身为M:M

dff<- c("", "P42356;Q8N8J0;A4QPH2", "P67809;Q9Y2T7", "Q08554", "Q13835", 
"Q5T749", "Q9NZT1")

library(splitstackshape)

cSplit(data.frame(dff), 'dff', ";")

#     dff_1  dff_2  dff_3
# 1:     NA     NA     NA
# 2: P42356 Q8N8J0 A4QPH2
# 3: P67809 Q9Y2T7     NA
# 4: Q08554     NA     NA
# 5: Q13835     NA     NA
# 6: Q5T749     NA     NA
# 7: Q9NZT1     NA     NA

更新:我意外忘记包含正确的列数。始终指定您将在INNER JOIN中使用的相同列(或*,如果您不关心)。

无论如何,我们仅通过返回我们将在查询中使用或查看的结果来优化查询。