0

このステートメントのどこが間違っていますか?

Select Max (TBLvirtual.c2) as MOF --> Most ordered food (MOF)--//
      ,TBLvirtual.c1
from
    (select a.OrdItems as c1, count(a.OrdID) as c2
     from Orderrouter a 
     group by a.OrdItems) as TBLvirtual

このエラーを受け取りました:

メッセージ 8120、レベル 16、状態 1、行 3 列 'TBLvirtual.c1' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。

4

2 に答える 2

4

SELECTに含まれていて、集計関数に含まれていないフィールドは、次の場所にある必要がありGROUP BYます。

Select Max(TBLvirtual.c2) as MOF --> Most ordered food (MOF)--// 
    ,TBLvirtual.c1 
from 
(
    select a.OrdItems as c1 , 
        count(a.OrdID)as c2 
    from Orderrouter a 
    group by a.OrdItems
) as TBLvirtual
group by TBLvirtual.c1  -- add this line

1行だけが必要な場合(SQL Fiddle With Demoを参照):

Select Top 1 c1, c2
from 
(
    select a.OrdItems as c1 , 
        count(a.OrdID)as c2 
    from Orderrouter a 
    group by a.OrdItems
) as TBLvirtual
order by c2 desc

そして、派生テーブルは本当に必要ありません。

Select Top 1 
    a.OrdItems as c1 , 
    count(a.OrdID) as c2 
from Orderrouter a 
group by a.OrdItems
order by c2 desc ;
于 2012-10-11T23:58:40.553 に答える
0

内側の Group By for count は既に C1 を一意にしているため、MAX に対してそれらを集計する必要はありません。これを行う

 select a.OrdItems as c1, count(a.OrdID) as c2
 from Orderrouter a 
 group by a.OrdItems
 order by count(a.OrdID) desc

これにより、最初に最高のカウントが得られ、次に次のカウントが続きます。トップ1またはトップNが必要な場合は、

Select TOP 1 c1, c2 FROM
(
 select a.OrdItems as c1, count(a.OrdID) as c2
 from Orderrouter a 
 group by a.OrdItems
) TopMost
Order By C2 DESC
于 2012-10-12T00:11:15.200 に答える