我正在尝试编写一个查询来从我们的数据库中提取一些信息,我需要将其分组为字符串的一部分。所以我做了GROUP BY substring()。但是看起来即使我是substring()的列在SELECT语句中,它仍然会失败。我还尝试将substr()放在select中,并使用它来执行“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)
答案 0 :(得分:1)
您必须对完整的案例陈述进行分组。
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
答案 1 :(得分: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)
“
答案 2 :(得分: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驱动程序获得