2012-11-16 92 views
1

我想在SQL語句中使用CAST(),但它不允許我在羣組中使用CAST(myDateTime,Date)作爲myLoginShortDate?我只知道SQL的基礎知識,我正在努力學習更多。
月數據看起來是這樣的:我可以在select語句中使用CAST()嗎?

客戶ID INT,空 電子郵件VARCHAR(60) DateEntered日期時間

我試圖獲得通過的日期時間的日期部分的分組和電子郵件

分組

我的存儲過程中選擇部分看起來是這樣的:

 select cll.Email,CAST(cll.DateEntered as Date) as LoginDate, 
       COUNT(cll.email) as FailedCount 
      from [GC].[dbo].[CustomerLoginLog] as cll 
      where [CustomerId] is null 
      group by LoginDate, cll.Email 
      order by FailedCount desc` 

它返回「無效的列名稱LoginDate'」

我希望能夠看到:

電子郵件,LoginDate,FailedCount

[email protected],12年11月1日,21

[email protected], 12年11月1日,17

[email protected],12年10月30日,15

等。我相信這只是一個初學者的錯誤。我有這個帖子都搞砸了,但我希望有人能理解它。選擇格式在我的電腦上看起來更好。

+0

我在科裏的回答,你問到一本好書,將您的T-SQL技能,以一個新的水平您的評論看。我強烈推薦Itzik Ben-Gan的「T-SQL基礎知識」。它真的幫助了我。 –

回答

2

GROUP BY語句在SELECT語句之前被評估,因此SQL服務器不知道您在SELECT語句中給出表達式的別名。爲了解決這個問題,你只需要重複在GROUP BY表達:

GROUP BY CAST(cll.DateEntered AS Date) 

或包裹的CTE查詢的簡單的一部分,做分組的CTE結果:

;WITH MyQuery AS 
(
    SELECT 
     cll.Email 
     ,CAST(cll.DateEntered AS Date) AS LoginDate 
    FROM 
     [GC].[dbo].[CustomerLoginLog] AS cll 
    WHERE 
     cll.[CustomerId] IS NULL 
) 
SELECT 
    Email 
    ,LoginDate 
    ,COUNT(*) AS FailedCount 
FROM 
    MyQuery 
GROUP BY 
    LoginDate, Email 
ORDER BY 
    FailedCount DESC 

或者,您可以將嵌入式SELECT語句中的CTE內容包含爲Mahmoud pointed out

+0

我得到'CustomerLoginLog.Email'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。你能推薦一本好書給那些已經完成基本SQL並被推入更難的人嗎? – user1830640

+0

@ user1830640:那是我的錯。我更新了我的答案,以解釋我的錯誤。不,我想我沒有任何書籍可以推薦我的頭頂。請檢查[so]或亞馬遜的高評價SQL書! –

+0

謝謝,你讓我走上正軌。我將「COUNT(cll.email)AS FailedCount」移到了MyQuery部分,並將「*,COUNT(MyQuery。電子郵件)AS FailedCount「,它的效果很好。從VFP移到C#.net和SQL Server 2008一次都是粗略的東西。:) – user1830640

0

SELECT語句在(邏輯上)在GROUP BY子句之後執行,以便GROUP BY子句不能看到別名LoginDate。你必須使用類型的子查詢,或CTE像這樣:

SELECT * 
FROM 
(
    SELECT 
    cll.Email, 
    CAST(cll.DateEntered as Date) as LoginDate, 
    COUNT(cll.email) as FailedCount 
    FROM [GC].[dbo].[CustomerLoginLog] as cll 
    WHERE [CustomerId] IS NULL 
) t 
GROUP BY LoginDate, cll.Email 
ORDER BY FailedCount DESC 
相關問題