2016-03-09 63 views
1

我寫SQL與組工作,我被困在下面的行SQL語法不受條款

select employeeid, (case paidL when'1' 
           Then 
           1 
            when '0' 
           Then 
           0 
           end) as 'paidLeave' from Lea order by employeeid group by 'paidLeave'       

如果給我,上面一行錯誤有關「paidLeave」

任何幫助完善的語法來消除誤差可以理解

+2

你的'case'語法是錯誤的。提示:「case」表達式以「case」開始,而不是「when」。 –

+0

即使您修復案例表達式的方式,您已經編碼它將嘗試按字符串文字'paidLeave' –

+0

分組請參閱https://msdn.microsoft。com/en-us/library/ms181765.aspx語法 –

回答

5

你的情況語法顯然是錯誤的。但是你有另一個錯誤:永不使用單引號列別名。這是一個等待發生的錯誤的例子。

最好使用不需要轉義的列名和表名。如果他們使用方括號或雙引號。

你想應該是這樣的查詢:

select employeeid, 
     (case when paidL = '1' then 1 
      when paidl = '0 then 0 
     end) as paidLeave 
from Lea 
order by employeeid; 

我不知道是什麼group by 'paidleave'是應該做的。在兩個方面它在語法上是錯誤的。如果你想要的總和,那麼查詢將是這樣的:

select employeeid, 
     sum(case when paidL = '1' then 1 
       when paidl = '0 then 0 
      end) as paidLeave 
from Lea 
group by employeeid; 

我認爲你需要研究基本的SQL語法。網絡和書籍上有很多資源。

+1

爲什麼地獄做了這個答案得到3 upvotes當我們的答案几乎相同,我回答第一? – sagi

+0

@sagi你的答案不夠完整5分鐘前,Gordon在那裏獲得更多信息......就這麼簡單。就我個人而言,我不會養成餵食OP的習慣,只是給他們足夠的工作量。 – Lankymart

+0

@Lankymart我的答案更完成了5分鐘自我,我編輯了大約4次的問題,所以它只是在同一時間完成所有的編輯! – sagi

1

你的情況下,語法都錯了,用這個:

select employeeid, (case when paidL = '1' 
          Then 1 
          when paidL = '0' 
          Then 0 
        end) as paidLeave 
from Lea 
order by employeeid  

另外,排序依次排在後面!

另一件事,引號用於字符串,而不是列名。也許你的意思是`但你不必這樣做,因爲這不是一個保留字。

這整個查詢似乎是錯誤的,如果你有一個以上的員工,這個團隊沒有任何意義,也許你打算通過paidoyave進行分組並通過payleave訂購?

也許你打算按員工ID進行分組,並選擇最大薪酬leave?在這種情況下:

select employeeid, max((case when paidL = '1' 
          Then 1 
          when paidL = '0' 
          Then 0 
        end)) as paidLeave 
from Lea 
group by employeeid 
order by employeeid 
+0

檢查我的編輯答案 – Alex

+0

我做了,我回答了你的問題@亞歷 – sagi

0

CASE語法不正確,它應該遵循表格;

 
CASE 
    WHEN <condition> THEN <result> 
    ... (multiples of WHEN ... THEN ...) 
    ELSE <result> 
END [Alias] 

所以像這樣;

CASE 
    WHEN [paidL] = '1' THEN 1 
    WHEN [paidL] = '0' THEN 0 
END [paidLeave] 
+0

檢查我的編輯答案 – Alex

0

首先,爲了更好地幫助您應該提供錯誤。然而,乍一看我會說你的錯誤是,你沒有包含employeeid列作爲GROUP BY的一部分。另外,我不會使用CASE聲明來解決您可以通過強制轉換解決的問題。您可以將CASTpaidL列設置爲INTBIT(僅當值僅爲0/1時)。

CAST([paidL] AS INT) paidL 
CAST([paidL] AS BIT) paidL