Sql server 2008 Sql Server 2008不明确和聚合函数错误
当我运行上面的查询时,我会遇到一些错误 我的结果中需要以下列,这就是我之前在Sql server 2008 Sql Server 2008不明确和聚合函数错误,sql-server-2008,Sql Server 2008,当我运行上面的查询时,我会遇到一些错误 我的结果中需要以下列,这就是我之前在select语句中指定的原因: select distinct (Member_Mailid), OrderLog_City, Member_MailId, OrderLog_MovieName, OrderLog_MovieLanguage from tbl_OrderLog where OrderLog_Initiated between '2013-02-01 00:00:01.010'
select
语句中指定的原因:
select distinct (Member_Mailid), OrderLog_City, Member_MailId,
OrderLog_MovieName, OrderLog_MovieLanguage
from tbl_OrderLog
where
OrderLog_Initiated between
'2013-02-01 00:00:01.010' and '2013-02-01 23:59:59.990'
and OrderLog_MovieLanguage in
('TAMIL','ENGLISH','HINDI','MALAYALAM')
group by Member_Mailid
having
count(Member_Mailid)>3
order by member_mailid asc
其中列出了观看次数超过3次和5次的客户
但它抛出了一个错误
Msg 8120,16级,状态1,第1行列
“tbl_OrderLog.OrderLog_City”在选择列表中无效,因为它
未包含在聚合函数或GROUP BY中
条款
Msg 209,第16级,状态1,第9行不明确的列名
“成员邮件ID”
您不能将
DISTINCT
和groupby
混合使用
由于您使用的是计数
,因此需要使用分组依据
进行聚合
您需要在GROUPBY
子句中包含所有非聚合列
类似这样的操作应能成功运行:
(OrderLog_City,
Member_MailId,
OrderLog_MovieName,
OrderLog_MovieLanguage)
评论后编辑
如果您想根据上述查询获取不同的Member\u Mailid
值,只需转换为子查询并对其运行distinct
:
select Member_Mailid
, OrderLog_City
, OrderLog_MovieName
, OrderLog_MovieLanguage
from tbl_OrderLog
where OrderLog_Initiated between '2013-02-01 00:00:01.010' and '2013-02-01 23:59:59.990'
and OrderLog_MovieLanguage in ('TAMIL','ENGLISH','HINDI','MALAYALAM')
group by Member_Mailid
, OrderLog_City
, OrderLog_MovieName
, OrderLog_MovieLanguage
having COUNT(Member_Mailid) > 3
order by member_mailid asc
感谢您回复普雷斯顿先生,但不幸的是,我遇到了一个错误,名为“Msg 209,16级,状态1,第15行不明确的列名‘member_mailid’。”对不起,我想我有一个列翻了一倍。请查看编辑过的查询。谢谢普雷斯顿先生,所以在最后一个查询中,我可以获得不同的成员邮件ID并计算(member_mailid)>3吗(做了3次以上的交易)…是否可能…?我不是100%确定您要做什么,但我添加了另一个查询,这可能会有所帮助。如果这仍然不是您要做的,您最好的选择是添加一些具有预期结果的示例数据,以便很容易看到您需要的确切内容。
select distinct(Member_Mailid)
from
(
select Member_Mailid
from tbl_OrderLog
where OrderLog_Initiated between '2013-02-01 00:00:01.010' and '2013-02-01 23:59:59.990'
and OrderLog_MovieLanguage in ('TAMIL','ENGLISH','HINDI','MALAYALAM')
group by Member_Mailid
, OrderLog_City
, OrderLog_MovieName
, OrderLog_MovieLanguage
having COUNT(Member_Mailid) > 3
) m