データベースから情報を取得するクエリを作成しようとしていますが、文字列の一部でグループ化する必要があります。そこで、GROUP BY substring() を実行しました。ただし、substring() している列が SELECT ステートメントに含まれていても、まだ失敗しているようです。また、substr() を独自に選択して「AS x」を実行しようとしましたが、GROUP BY の後に実行されるため、これも失敗します。
SELECT
M.Cabot_source,
CASE substring(M.Cabot_source,6,1)
WHEN 'C' THEN 'CoregUserNameLC'
WHEN 'P' THEN 'PPC'
WHEN 'O' THEN 'Organic'
WHEN 'S' THEN 'Ad Swap'
WHEN 'I' THEN 'Internal'
ELSE 'Unknown'
END as source_type
FROM members_ M
WHERE M.Cabot_source != ''
GROUP BY substring(M.Cabot_source,6,1)
これは私に返されるエラーです:
データベース接続から報告された SQL エラー:
> (0x3ddbe8) Lyris function: SQLClass::SendToSQLInternal() Lyris error
> description: Command.Open() failed with error code 80040e14 Database
> error information: Error 8120: Column 'members_.Cabot_source' is
> invalid in the select list because it is not contained in either an
> aggregate function or the GROUP BY clause. (source: Microsoft OLE DB
> Provider for SQL Server) SQL Statement: SELECT M.Cabot_source, CASE
> substring(M.Cabot_source,6,1) WHEN 'C' THEN 'CoregUserNameLC' WHEN 'P'
> THEN 'PPC' WHEN 'O' THEN 'Organic' WHEN 'S' THEN 'Ad Swap' WHEN 'I'
> THEN 'Internal' ELSE 'Unknown' END as source_type FROM members_ M
> WHERE M.Cabot_source != '' GROUP BY substring(M.Cabot_source,6,1)