2013-01-23 49 views
0

我有這樣的SQL:Aggregate&count「SELECT .... AS [Name]」field?

SELECT 
Mid(Note, 
    InStr(Note, "device.")- 
    (
    InStr(Note, "device.")- 
    InStr(Note, "pressure and") 
) 
    +13, 
    (InStr(Note, "device.") - InStr(Note, "pressure and")) - 14 
) 
    AS [Device], 
    Count([Device]), 
Date_Field & " " & Time_Field AS [DateTime], 
EnteredBy 
FROM MyLog 
WHERE Note LIKE "*removed and*" 
GROUP BY [Device] 
ORDER BY Date_Field DESC 
; 

我想GROUP BY是自定義字段[Device]和怎麼算每臺設備的許多有。但是上面的代碼給出了「... AS [Device]」部分的錯誤「...不包括指定的表達式......作爲聚合函數的一部分」。

我怎樣才能做到這一點?

現在的數據是這樣的:

Record1  12/05/12 03:02:12 User2 
Record1  12/02/12 01:02:12 User1 
Record1  12/01/12 02:02:12 User2 
Record2  12/06/12 03:02:12 User2 
Record2  12/07/12 03:02:12 User3 

但我想它看起來像:

Record1 3 
Record2 2 

這是舊的SQL工作(不聚合):

SELECT Mid(Note, 
    InStr(Note, "device.")- 
    (
    InStr(Note, "device.")- 
    InStr(Note, "pressure and") 
) 
    +13, 
    (InStr(Note, "device.") - InStr(Note, "pressure and")) - 14 
) AS Device, Date_Field & " " & Time_Field AS [DateTime], EnteredBy 
FROM MyLog 
WHERE Note LIKE "*removed and*" 
ORDER BY Date_Field DESC; 
+0

這是相當混亂。您的樣品數據不包括「壓力和」或「設備」或「*刪除和*」。你有沒有真實的樣本數據? – Fionnuala

+0

@Remou我無法提供真實的數據,沒有。 – JBurace

+0

好吧,我想我可能有一個可用的版本。見下文。 – Fionnuala

回答

1

您不能在MS Access中的GROUP BY中引用別名設備,但可以創建子查詢並引用別名fr那個。

這將運行對我來說:

SELECT EnteredBy, Device, Count(Device) As CountDev FROM (
SELECT 
Mid(Note,InStr(Note,"device.")- 
     (InStr(Note,"device.")- 
      InStr(Note,"pressure and"))+13, 
    (InStr(Note,"device.")-InStr(Note,"pressure and"))-14) AS Device, 
MyLog.EnteredBy 
FROM MyLog 
WHERE MyLog.[Note] Like "*removed and*") 
GROUP BY EnteredBy, Device 
+0

嗯我的查詢通常在GROUP BY的東西之前工作。當我嘗試你的時候,它說「傳遞給SUBSTRING函數的長度參數無效」 – JBurace

+0

我現在正在得到'...查詢不包含指定的表達式...作爲聚合函數的一部分。 'Mid(Note .....)'部分。此外,我想我需要刪除日期/時間顯示,因爲這些不會被彙總。 – JBurace

+0

奇怪,編輯後出現「無效程序調用」。如果我刪除這些日期/時間(我不需要那些聚合),我仍然得到相同的'無效的長度參數'ODBC調用失敗。 – JBurace

0

與此類似 - 基本上巢複雜的部分變成subbquery。

select dev, count(dev) from 
(
SELECT 
Mid(Note, 
    InStr(Note, "device.")- 
    (
    InStr(Note, "device.")- 
    InStr(Note, "pressure and") 
) 
    +13, 
    (InStr(Note, "device.") - InStr(Note, "pressure and")) - 14 
) 
    AS dev, 
Date_Field & " " & Time_Field AS DateTime, 
EnteredBy 
FROM MyLog 
WHERE Note LIKE "*removed and*" 
) 
GROUP BY dev 
ORDER BY DateTime DESC 
+0

嗯,給我'SELECT語句包括一個保留字或參數名拼寫錯誤或缺失,或標點符號不正確' – JBurace

1

您正在收到該錯誤,因爲設備不是列。也許你可以使用子查詢,雖然我承認在一段時間內還沒有使用過Access。

嘗試這樣:

SELECT Count([Device]), Device, [DateTime], EnteredBy 
FROM (
SELECT 
Mid(Note, 
    InStr(Note, "device.")- 
    (
    InStr(Note, "device.")- 
    InStr(Note, "pressure and") 
) 
    +13, 
    (InStr(Note, "device.") - InStr(Note, "pressure and")) - 14 
) 
    AS [Device], 
    Date_Field & " " & Time_Field AS [DateTime], 
    EnteredBy 
FROM MyLog 
WHERE Note LIKE "*removed and*") t 
GROUP BY Device, [DateTime], EnteredBy 
ORDER BY Date_Field DESC 
; 

好運。

+0

我試圖得到'無效的長度參數傳遞給子字符串函數'。子字符串在沒有聚合更改的情況下工作。 – JBurace