2014-04-16 18 views
1

這是我的查詢:查詢中的列名錯誤?

SELECT * FROM CSEReduxDepts, CSEReduxResponses 
     WHERE CSEReduxDepts.csedept_id = CSEReduxResponses.employeedept 
      AND CSEReduxResponses.status = 1 
      AND CSEReduxResponses.execoffice_status = 1 
      AND MONTH([CSEReduxResponses.approveddate]) = MONTH(GETDATE()) 
     ORDER BY approveddate 

如果我拿出AND MONTH([CSEReduxResponses.approveddate]) = MONTH(GETDATE()) 它會工作,但我想只有從本月起獲得數據。我怎樣才能使它工作?

+2

我想'CEReduxResponses'表中沒有'approveddate'列。檢查你的拼寫。 – Barmar

+3

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 用ANSI - ** 92 ** SQL標準(超過** 20年前的**)停止使用舊式*逗號分隔的表*樣式列表 –

+2

您如何取出方括號?你使用什麼數據庫服務器? –

回答

2

方括號表示範圍如表或列。通過將括號括起來,你告訴sql服務器它的一個元素。

這會工作:

[CSEReduxResponses].[approveddate] 

但你應該可能只是刪除它們。

另外,正如在評論中指出的那樣,在這裏使用SQL92語法會更好。

SELECT * 
FROM CSEReduxDepts d 
inner join CSEReduxResponses r on d.csedept_id = r.employeedept 
           and r.status = 1 
           and r.execoffice_status = 1 
Where 
    MONTH(r.approveddate) = MONTH(GETDATE()) 
ORDER BY approveddate 
+0

看來,多部分標識符「 CSEReduxResponses.approveddate「無法綁定。 – user3408399

+0

這可能是因爲如果每個表有兩個,一個'approveddate'列,那麼TSQL無法確定要使用哪個'approveddate'列。否則,這可能意味着'CSEReduxResponses'表中沒有'approveddate'列。 –

+0

@ user3408399,現在就試試。我沒有在where子句中使用別名。愚蠢的複製粘貼錯誤。我的appologies – paqogomez

2

試試這個:

select * 
    from CSEReduxDepts d 
     inner join CSEReduxResponses r on r.employeedept = d.csdept 
    where r.status = 1 
     and r.execoffice_status = 1 
     and MONTH(r.approveddate) = MONTH(GETDATE()) 
    order by r.approveddate asc 

一個TSQL查詢/語句中使用方括號只允許使用的保留字,或其他特殊字符,像這樣:

select r.[Approved Date] 

你可能會看到列名使用空格,所以這是方括號的適當使用。否則,就像在法語中那樣:

select r.[Date Approuvé] 

哪個確實不會在方括號之外被接受。

這裏有一個關鍵字的例子:

select r.[month] 

告訴TSQL解釋爲列名的字month,而不是像在TSQL MONTH()功能。