2014-04-03 96 views
0

聲明請幫助:SQL INNERJOIN在選擇

我要創建基於其他列的表達式中的列,

但表達命中之前,必須有一個日期檢查 如果日期在特定日期之前,它必須執行表達式,如果日期在所述日期之後,則必須執行另一個表達式,

THEN:theres一個唯一列,其數字爲1-10它,每個數字代表不同的表達。

內連接並選擇行的罰款,它只是開關,如果表達被打我

基本語句需要像這樣

select column1 if(date<neededDate) 
{select case ExpressionColumn 
when 1 //do stuff 
when 2 // do stuff 
else// do nothing 
} 


select column1 if(date>neededDate) 
{select case ExpressionColumn 
when 1 //do stuff 
when 2 // do stuff 
else// do nothing 
} 

我希望這是有道理的

回答

1

您需要嵌套在另一個case語句中的兩個case語句,它可以像下面

SELECT CASE WHEN date > neededDate THEN 
        CASE ExpressionColumn 
         WHEN 1 THEN '1' 
         WHEN 2 THEN '2' 
         ELSE 'null' 
        END 
      WHEN date < neededDate THEN 
        CASE ExpressionColumn 
         WHEN 1 THEN '1' 
         WHEN 2 THEN '2' 
         ELSE 'null' 
        END 
      ELSE 'null' 
     END 
    FROM YourTable;        
1

您需要在SQL Server查詢CASE..WHEN..THEN

簡單的CASE表達式:

CASE input_expression 
    WHEN when_expression THEN result_expression [ ...n ] 
    [ ELSE else_result_expression ] 
END 
Searched CASE expression: 
CASE 
    WHEN Boolean_expression THEN result_expression [ ...n ] 
    [ ELSE else_result_expression ] 
END 
1

你有你的語法錯誤:

select case sign(datediff('s', date, neededDate)) -- precision: second 
      when 0 then -- case missing in your spec ! 
      else 
       case ExpressionColumn 
        when 1 then -- case 1 
        when 2 then -- case 2 
        else -- whatever 
       end 
     end 
    from whatever 
    ; 

替換了列適當的表達每個註釋。

你的情況

搜索的情況下表達可能是更方便:

select case 
      when (date < neededDate) then 
       -- note the difference: instead of 'case x when y then ...' you write 'case when b then ...' 
       case ExpressionColumn 
        when 1 then -- case 1 
        when 2 then -- case 2 
        else -- whatever 
       end 
      when (date > neededDate) then 
       case ExpressionColumn 
        when 1 then -- case 1 
        when 2 then -- case 2 
        else -- whatever 
       end 
      else -- this is missing from your spec! 

     end 
    from whatever 
    ; 
+0

做'sgn'是在你的代碼中無效[標籤:sql-server]函數'case sgn(date - neededDate)'不知道你在那裏試圖做什麼。 –

+0

@VladimirOselsky將op的規範轉換爲簡單的大小寫表達式。謝謝你的提示 – collapsar