2013-08-12 40 views
0
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 

当我运行上述查询时,我面临一些错误。Sql Server 2008暧昧和聚合函数错误

我需要在我的结果如下列,这就是为什么我在select声明之前指定:

(OrderLog_City, 
Member_MailId, 
OrderLog_MovieName, 
OrderLog_MovieLanguage) 

将列出谁看过3次以上和5倍的客户。

但它会抛出一个错误;因为它 并不在聚合函数或GROUP BY子句 包含

消息8120,级别16,状态1,行1列 “tbl_OrderLog.OrderLog_City”在选择列表中无效。

消息209,级别16,状态1,9号线不明确的列名 “member_mailid”

回答

0

你不能因为你使用COUNT混合DISTINCTGROUP BY

,你需要聚合与GROUP BY

您需要在GROUP BY条款的所有非集合列。

如果您想根据上面的查询来获取不同的 Member_Mailid值注释

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 

编辑,只是变成一个子查询和运行DISTINCT

像这样的东西应该成功运行反对:

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 
+0

感谢您的回复Mr.Preston,但不幸的是我面对一个名为“消息209一个错误,级别16,状态1,行15 Ambiguou s列名'member_mailid'。“ – Keerthi

+0

对不起,我想我的专栏翻了一番。请参阅编辑后的查询。 –

+0

谢谢Mr.Preston,所以在这个最后的查询中,我可以得到不同的成员邮件ID,还有COUNT(Member_Mailid)> 3(做过3次以上的交易)...?可能吗...? – Keerthi