2013-11-25 76 views
0

我有一個名爲TableA的表,如下所示;如何編寫基於列的查詢

+----+---------------+--------------+--------------+ 
| Id | Frequency | Inserted_Date| Eligibility | 
+----+---------------+--------------+--------------+ 
| 1 | Halfyearly | 23/8/2013 |    | 
| 2 | Quaterly  | 24/11/2013 |    | 
+----+---------------+--------------+--------------+

以下資格柱最初empty.I需要寫到哪資格設置不得基於頻率爲當月是肯定/查詢。

爲1的記錄, 作爲當今資格=無

爲第二紀錄, 今天資格=是

+----+---------------+--------------+--------------+ 
| Id | Frequency |Inserted_Date | Eligibility| 
+----+---------------+--------------+--------------+ 
| 1 | Halfyearly | 23/8/2013 | No   | 
| 2 | Quaterly  | 24/11/2013 | Yes  | 
+----+---------------+--------------+--------------+

我不知道如何編寫一個查詢爲了獲得上面的輸出和更多的我需要改變它每個月。

請幫我一把。

非常感謝大家的回覆。

+0

1.存儲日期使用DATE數據類型2.(平時)不要儲存可以很容易地計算出數據在飛行中。這不應該是資格嗎? ;-) – Strawberry

+0

也許這只是我,但我不能告訴你如何確定'Eligibilility'的價值。實際上,我也無法分辨表格代表什麼。 – OGHaza

+0

@OGHaza每個月都會這樣做。因此當前月份將檢查此記錄是否符合條件。 – Deepak

回答

1

我的理解是,如果Inserted_Date = Jan 2013Frequency = 'Halfyearly',然後Eligibility = 1在當前月份是Jan 2013, Jul 2013, Jan 2014, Jul 2014 etc..

UPDATE TableA 
SET Eligibility = CASE WHEN (Frequency = 'Halfyearly' 
          AND MONTH(Inserted_Date) % 6 = MONTH(NOW()) % 6) 
         OR (Frequency = 'Quarterly' 
          AND MONTH(Inserted_Date) % 3 = MONTH(NOW()) % 3) 
         THEN 'Yes' 
         ELSE 'No' 
       END 

如果你每年還有你可以檢查

MONTH(Inserted_Date) = MONTH(NOW()) 

看到這個工作SQLFiddle

+0

感謝它的工作很好.. – Deepak

0

使用CASE..WHEN

UPDATE tbl 
SET Eligibility = 'Your value' Frequency WHEN 'Half Yearly' THEN 'No' 
           WHEN 'Quarterly' THEN 'Yes' 
+0

」,我需要設置Eligibility的值。 – Deepak

1

嘗試

UPDATE TableA 
SET ELIGIBILITY = CASE WHEN DATEPART(MM,GETDATE()) = DATEPART(MM,DATE) 
        THEN 'YES' 
        ELSE 'NO' END 
+0

我在存儲過程中使用此查詢,每月觸發一次。資格列將相應更改 – Deepak

+0

您正在根據當前月份對資格進行合格嗎? – Rohaan

0

「的基礎上Inserted_Date,我需要設置資格的價值。」

然後使用

UPDATE tbl 
SET Eligibility = CASE WHEN InsertedDate='' THEN 'No' 
          WHEN '' THEN 'Yes' 
+0

在第一行,Inserted_Date = '23/8/2013',然後資格=八月和二月的月份,其餘月份其餘月份資格=否。 – Deepak

+0

你有專欄來存儲月份的名字嗎? – MusicLovingIndianGirl

0

你可以得到所需要的輸出與下面的查詢: 

SELECT ID, 
     Frequency, 
     Date, 
     (CASE 
      WHEN TO_CHAR (SYSDATE, 'mm') = TO_CHAR (Date, 'mm') 
      THEN 
       YEligibilility 
      ELSE 
       NEligibilility 
     END) 
      AS Eligibilility 
    FROM (SELECT ID, 
       Frequency, 
       Date, 
       'Yes' AS YEligibilility, 
       'No' AS NEligibilility 
       From TableA);