-3

私が持っている SQL スキルが低いことに問題があります。、、、 のProducts構造を持つテーブルでは、すべてのレコードをおよびでグループ化し、クエリID で指定されたグループがグループ内で最低価格を持たないか、またはその価格が他よりも 5% を超えて最低でないグループを選択する必要があります。IdSupplierBrandArticlePriceBrandArticleSupplier

GROUP BYとを試してみましHAVINGたが、何も機能しません。何か案は?

アルゴリズム: 1.および 2.
によってすべてのレコードをグループ化します。指定され た 3 のいずれかを含むグループのみを選択します 。BrandArticle
Supplier
SupplierPricePrice

4

2 に答える 2

1

私はこの質問を、特定のサプライヤーの価格が最低価格より 5% 以上高いすべての製品を検索するものと解釈しています。言語は理解するのが少し難しいので、これが私の最善の推測です。

その場合は、ウィンドウ関数を使用してグループの最低価格を計算し、単純なロジックを使用します。

select p.*
from (select p.*,
             min(price) over (partition by supplier, article) as MinPrice
      from products p
     ) p
where SupplierID = @SupplierId and
      price > 1.05 * MinPrice;

編集:

min()一部のサプライヤーを除外して取得するには:

select p.*
from (select p.*,
             min(case when supplier not in (<list>) then price end) over
                  (partition by supplier, article) as MinPrice
      from products p
     ) p
where SupplierID = @SupplierId and
      price > 1.05 * MinPrice;
于 2013-07-07T19:19:04.230 に答える
0

あなたが何を求めているのか正確にはわかりませんが、あなたの質問を正しく読んだら、どうですか

Select * From Products p
Where price != (Select Min(Price)
               From products
               Where Brand = p.Brand
                 And Article = p.Article)
  And price < 0.95 *
              (Select Min(Price)
               From products
               Where id != p.Id
                  And Brand = p.Brand
                  And Article = p.Article)

これがあなたが望むものではない場合でも、あなたが望むものに対して正しいSQLを書く方法についての手がかりを与えるはずです...

于 2013-07-07T18:15:05.160 に答える