2016-06-29 25 views
1

如果類型爲'C'並且記錄發佈時間大於或等於類型爲''的記錄的發佈時間, W'帳號和發帖日期相同。我正在努力創建一個if/then,類型'C'> = posttime的類型'W'的後期...任何幫助將不勝感激。我之前做過這些類型,但從來沒有在只有一個記錄項目不同的同一個字段中完成。SQL SSMS如果THEN在同一個字段中有多個條件

+0

你能嘗試添加你已經嘗試添加一些背景一些代碼/ SQL查詢? – FishStix

+0

一些示例數據和期望的結果將是最有幫助的 –

+0

你的第一個問題是你有關係數據,並且你剛纔描述的大部分內容都屬於ON和WHERE謂詞條款。 –

回答

0

如果我理解正確的話,你描述可以通過完成JOINS。 認爲relational data setsSARGs

雖然你還沒有給我們一個表格結構(這有很大的幫助),這個解決方案可以幫助你指引正確的方向。下面假設一個FACTTRANSACTIONS,其中carnality本身是M:M

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 

更新:我不小心忘了,包括列數正確。請始終指定您在INNER JOIN中使用的相同列(或*,如果您不在意)。

無論如何,我們通過只返回我們將在查詢中使用或看到的結果來優化查詢。

+0

感謝Clifton_h,這很好地工作。真的很感激它! – jwilkins

+0

甜。請將答案標記爲已解決,謝謝。 :) –

+0

如果一天可以有一個以上的W,那麼最終會出現重複。 – shawnt00

0

這是我最初的,但它只是攪動SSMS沒有結果。基本上,我只需要返回所有'C'型記錄,其中'W'型記錄的後期時間小於'C',但記錄的賬號和後期日期相同。 posttime,postdate,type和number是我表格中的所有字段。

SELECT *

因交易

WHERE ACTIONCODE = 'c' 和發表時間> =發表時間和ACTIONCODE = 'W'

+0

您的查詢可能無法使用效率最高的索引,因爲您自己引用了相同的列(換句話說,可能是索引/表掃描)。 此外,這應該與問題一致。 xD –

+0

應該立即返回。沒有辦法讓一行在一列中有多個值。 – shawnt00

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 
) 
相關問題