0

私はこのような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],
  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[デバイス]」セクションに「...指定された式を...集計関数の一部として含めないでください」というエラーが表示されます。

どうすればこれを達成できますか?

現在、データは次のようになっています。

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;
4

3 に答える 3

1

MS Access の GROUP BY でエイリアス デバイスを参照することはできませんが、サブクエリを作成してそこからエイリアスを参照することはできます。

これは私のために実行されます:

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
于 2013-01-23T17:46:41.800 に答える
1

Device は列ではないため、このエラーが発生しています。確かに私はしばらく 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
;

幸運を。

于 2013-01-23T17:48:38.083 に答える
0

これに似たもの - 基本的に複雑な部分をサブクエリにネストします。

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
于 2013-01-23T17:47:21.673 に答える