2015-04-22 33 views
0

我正在使用MS SQL Server,並有一個存儲過程,我根據某些規則評估事務,並根據這些規則將每行標記爲符合條件或不符合條件。例如,前一年的交易不合格,某些產品可能不合格。SQL要跟蹤規則

我也想記錄交易不符合條件的原因。例如,從去年開始,不合格的產品等。我有一個列出所有不合格代碼的表格。

我按順序應用規則並在定義爲int的字段eligCode中記錄ineligibility的第一個原因。

但我似乎無法弄清楚如何在存儲過程中編碼。任何幫助將不勝感激。提前致謝。

+2

查找到CASE語句。 –

回答

0

這應該給你的頭開始:

CREATE PROCEDURE [dbo.YourSprocName] 
AS 
BEGIN 
    SELECT CASE 
      WHEN datepart(year, transaction_date) = datepart(year, getdate()) - 1 --if transaction_date year = previous year 
       THEN 'Ineligible' 
      WHEN product_type = <something> -- non eligible products 
       THEN 'Non-eligible' 
      ELSE 'Eligible' 
      END AS transaction_status 
     ,CASE 
      WHEN ineligibility_code = 1 -- assuming 1 is one of the ineligbility code 
       THEN 'Bad transaction' 
      ELSE 'Unknown' 
      END AS ineligibilty_reason_desc 
    FROM YourTable 
    WHERE yourColumn = <condition> 
END 
0
declare @eligCode as int 
declare @TransID as int 

.... 
select @TransID = NNN -- some value declared above 
     @eligCode = CASE 
        WHEN YEAR(TRANSACTION_DATE) < YEAR(getdate()) THEN 1 
        WHEN [CONDITION2] THEN 2 
        WHEN [CONDITION3] THEN 3 
        WHEN [CONDITION4] THEN 4 
        ELSE 0 
       END 
... 
Insert into LOG_TABLE (Transaction_ID, eligCode) values (@TransID, @eligCode)