1

データベースから情報を取得するクエリを作成しようとしていますが、文字列の一部でグループ化する必要があります。そこで、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)
4

3 に答える 3

2

完全な case ステートメントをグループ化する必要があります。

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 
  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
于 2012-06-28T18:07:26.603 に答える
0

次のいずれかを実行できます。

select M.Cabot_source + group by M.Cabot_source

または、たとえば次のような集計関数を使用します。

 select max(M.Cabot_source)

唯一の例外は、暗黙の集計関数がある MySQL です。私はそれreturn_random_record(M.Cabot_source)を呼び出しますが、MySQL のこの既定の (そしておそらく未定義の) 動作は、SQL Server ドライバーでは利用できません。

于 2012-06-28T16:40:19.427 に答える
0

エラーの原因は次のとおりです。

(SELECT COUNT(*) FROM members_ M3 WHERE M3.Cabot_source = M.Cabot_source) as names, 
(SELECT COUNT(*) FROM members_ M2 WHERE M2.MemberType_ = 'normal' AND M2.Cabot_source = M.Cabot_source) 
于 2012-06-28T15:45:15.973 に答える