我有一個T-SQL查詢在SQL Server 2005上運行,我已經定義了一個數據表來返回給應用程序。如何將SQL Server查詢邏輯整合到一個案例中?
我使用幾個case語句分配幾個值,每個case語句具有相同的邏輯。
我想知道是否有辦法讓這個更高效,而不是多次執行相同的邏輯?我在這裏縮寫了邏輯,但希望能夠說明問題。有沒有一種方法可以不必使用相同的「pt.PTYP_Category IN(90,92,94,96,98)」邏輯定義三個案例語句?
`INSERT INTO @MemberAccountingDetail
(
MACD_DPST_FEES_RowID,
MACD_HighOrderSort,
MACD_CategorySortDate,
MACD_MemberName
)
SELECT
d.DPST_ID As MACD_DPST_FEES_RowID,
CASE
WHEN pt.PTYP_Category IN (90, 92, 94, 96, 98)
THEN 0
ELSE 1
END As MACD_HighOrderSort,
CASE
WHEN pt.PTYP_Category IN (90, 92, 94, 96, 98)
THEN DATEADD(ss, 1, d.DPST_TransactionDate)
ELSE @DefaultDate
END As MACD_CategorySortDate,
CASE
WHEN pt.PTYP_Category IN (90, 92, 94, 96, 98)
THEN pt.PTYP_CategoryDesc
ELSE SUBSTRING(ISNULL(d.DPST_OriginUserID, ''), 1, 11)
END As MACD_MemberName
FROM
Deposit d
INNER JOIN PaymentType pt
ON pt.PTYP_ID = d.DPST_PTYP_ID
WHERE
d.DPST_MEMB_ID = @MEMB_ID;
謝謝 吉姆`
根據:HTTP:// stackoverflow.com/questions/2072721/how-can-i-select-multiple-columns-within-a-case-when-on-sql-server,以及:http://stackoverflow.com/questions/8358642/case-聲明在SQL中如何返回多個變量,它看起來像你運氣不好 – mcalex
是的,這看起來像相同類型的東西。我想確保我不會錯過任何東西,因爲我不是專家。謝謝你指出這個問題。我很害怕這個!吉姆:) –
我可以做的一件事是添加另一列到我的類別表中,我可以在這裏查詢單個字段而不是五個字段。如果需要,我會考慮。再次感謝您的其他參考。 –