1

次の 4 つのテーブルがあります。

Store (
    row bigint,
    id uniqueidentifier,
    name varchar
)

Products (
    row bigint,
    id uniqueidentifier,
    storeID uniqueidentifier,
    productname varchar
)

Customer (
    row bigint,
    id uniqueidentifier,
    storeID uniqueidentifier,
    fName,
    lName,
    email
)

orders (
    row bigint,
    id uniqueidentifier,
    store_ID uniqueidentifier,
    cust_id uniqueidentifier,
    prod_id uniqueidentifier,
    date datetime
)

特定の店舗から 110 から 250 の注文があるすべての顧客を検索するクエリを設計していますか?

特定の店舗の顧客名、店舗名、およびその顧客からの注文数を一覧表示しようとしています。

試したクエリは次のとおりです。

select c.firstname + ' '+c.LastName, c.EmailAddress, s.name,  COUNT(o.id) from Orders o 
    inner join store s on s.ID=o.store_ID 
            inner join Customers c on c.ID=o.cust_ID 
    group by (c.firstname + ' '+c.LastName+cast(o.cust_ID as varchar(max) ))
    having count(o.id) >110 and count(o.id)<250

しかし、上記の結合ステートメントからエラーが発生します。私たちが間違っていることについて何か考えはありますか?

4

2 に答える 2

1

次の方法で、グループ内の非集計列を単純にリストしてみてください。

select
    c.firstname + ' ' + c.LastName,
    c.EmailAddress,
    s.name,
    count(o.id)
from Orders o
inner join store s on s.ID=o.store_ID
inner join Customers c on c.ID=o.cust_ID
group by c.firstname + ' ' + c.LastName,
    c.EmailAddress,
    s.name
having count(o.id) between 111 and 249

betweenが含まれているため、範囲の値が変更されていますが、 for を使用してhaving条件を単純化していることにも注意してくださいbetween

于 2013-08-29T00:27:32.443 に答える
0

問題は、select ステートメントのすべての列でグループ化していないことです。

select c.firstname + ' '+c.LastName, c.EmailAddress, s.name,  COUNT(o.id) from Orders o 
    inner join store s on s.ID=o.store_ID 
            inner join Customers c on c.ID=o.cust_ID 
    group by c.firstname + ' '+c.LastName, c.EmailAddress, s.name
    having count(o.id) >110 and count(o.id)<250
于 2013-08-29T00:28:38.733 に答える