0

これを適切に行う方法:

お客様

CusID, CusLname, CusFname, CusMname, CusAddress, CusEmailAdd

注文

OrderID,  Order,   CusID

SQL

Select  Count(OrderID), o.CusID, CusLname, CusFname, CusMname, CusAddress, CusEmailAdd
From Customer c 
Inner join
Order o
On c.CusID = o.CusID
Group By o.CusID

エラー Column 'CusLname, CusFname, CusMname, CusAddress, CusEmailAdd' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

これらの列を Group By 句に追加する必要があるのはなぜですか? CuID だけでグループ化したいので、Group By に含めずにそれらの列を選択するにはどうすればよいですか?

4

4 に答える 4

1

少し異なるバージョン (Gordon Linoff の提案とは異なります):

select
     cnt, c.CusID, CusLname, CusFname, CusMname, CusAddress, CusEmailAdd
from Customer c 
join (
    select  
        count(OrderID) cnt, CusID
    from Order o 
    group by
        CusID
) o on
    c.CusID = o.CusID
order by
    c.CusID // ordering by OrderID and Order is out of logic :)
于 2013-09-19T18:33:34.883 に答える
0

それらをgroup by句に含めるだけです:

Select  Count(OrderID), o.CusID, CusLname, CusFname, CusMname, CusAddress, CusEmailAdd
From Customer c 
Inner join
Order o
On c.CusID = o.CusID
Group By o.CusID, CusLname, CusFname, CusMname, CusAddress, CusEmailAdd;
于 2013-09-19T02:42:51.397 に答える
0

I also find first answer to be the best, but in SQL2005 CTEs came into existence and they can help obtain better readability:

;with order_cte as (
    select count(OrderID) cnt, CusID
    from Order o 
    group by CusID
)
select cnt, c.CusID, CusLname, CusFname, CusMname, CusAddress, CusEmailAdd
from Customer c 
   join order_cte o on c.CusID = o.CusID
order by c.CusID
于 2015-12-19T05:54:42.307 に答える