[ここerrors--最初のポストをフォーマット赦し、私は右のそれを行うことを真剣にしようとしたしてください]SQL Serverを使用して、同じテーブルのすべての「類似」レコードの最小値にレコードを結合するにはどうすればよいですか?
は機能的に言えば、私は単に項目「のような」はそのグループに最低価格を持っているアイテムを見つけようとしています。たとえば、たくさんのワインがありますが、最低価格の750ml REDとWHITEを見つける必要があります。たくさんのチーズがありますが、私は最低価格の8oz CHEDDARとFETAを見つける必要があります。
私が見つけたすべての解決策は、自分のコードにあるのと同じことをすると言います。 自分の「自己参加」に問題があるはずです。選択クエリは10秒未満で実行され、ネストされた選択も実行されます。しかし、私はそれらに参加しようとすると、私のクエリがハングし、決して終了しません。この結合を正常に実行するには、何らかの方法が必要です。
私は何百万行ものデータを持っています。各行はユニークなアイテム/ストアの組み合わせです。私のネストされた選択は、 "名前"のブランドではないアイテムに対して私たちが持っている最低の価格を見つけることを試みています。 store_name、category、subcategory、class、package_desc2、unit_name、chk(私のクエリでは、 "chk"は2つの異なる列の結果によって決定されます)の列によって決定されるような、
これは、前述の列のすべての組み合わせの個別のリストを、それぞれの価格が最も低いものにします。私は、ネームド・セレクトで見つけた安価なものが正確なものであるかどうかを調べるために、非「名前」ブランド・アイテムにTHATに参加しようとしています。どんな助けもありがとう!私はこれを数日間してきたが、それを理解することはできない。ここ
SQL:
SELECT b.zone_name,
b.store_name,
b.family,
b.category,
b.subcategory,
b.class,
b.team,
b.subteam,
b.pos_dept,
b.brand_name,
b.item_description,
b.upc,
b.package_desc1 pkg,
b.package_desc2 sz,
b.unit_name,
CASE
WHEN b.good = 'good'
OR b.how_good = 1 THEN 'YES'
ELSE 'NO'
END AS chk,
b.eff_pricetype,
b.eff_price low_price,
b.cd dollar_sales,
b.cu unit_sales,
b.cgm margin_dollars,
b.cgm/Nullif(b.cd, 0) AS margin_pct,
b.deleted_item,
b.discontinue_item,
b.not_available,
b.remove_item,
b.recall_flag,
CASE
WHEN
SUM(
Isnull(b.deleted_item, 0) + Isnull(b.discontinue_item, 0) + Isnull(b.not_available, 0) + Isnull(b.remove_item, 0) + Isnull(b.recall_flag, 0)) = 0 THEN
'NO'
ELSE 'YES'
END AS istatus,
d.low
FROM mytable b
INNER JOIN(SELECT c.store_name,
c.category,
c.subcategory,
c.class,
c.package_desc2,
c.unit_name,
CASE
WHEN c.good = 'good'
OR c.how_good = 1 THEN 'YES'
ELSE 'NO'
END AS chk,
MIN(c.eff_price) low
FROM mytable c
WHERE store_name = 'some store'
AND brand_name NOT LIKE '%name%'
AND weeks = 'Last 12 weeks'
AND (eff_pricetype = 'REG'
OR eff_pricetype = 'EDV'
OR eff_pricetype = 'GBC'
OR eff_pricetype = 'CMP'
OR eff_pricetype = 'LIN'
OR eff_pricetype = 'FRZ'
OR eff_pricetype = 'GBB'
OR eff_pricetype = 'EDLP'
OR eff_pricetype = 'GBN'
OR eff_pricetype = 'GBR'
OR eff_pricetype = 'MKT'
OR eff_pricetype = 'COMP'
OR eff_pricetype = 'R'
OR eff_pricetype = 'COM')
AND (family = 'carrots'
OR family = 'tomatoes'
OR family = 'Cheese'
OR family = 'Coffee'
OR family = 'peppers'
OR family = 'milk'
OR family = 'oil'
OR family = 'season'
OR family = 'Housewares'
OR family = 'paper'
OR family = 'Meat'
OR family = 'soup'
OR family = 'nuts'
OR family = 'pizza'
OR family = 'potatoes'
OR family = 'Seafood'
OR family = 'beer'
OR family = 'vitamins'
OR family = 'Tea'
OR family = 'Wine'
OR family = 'beans')
GROUP BY c.store_name,
c.category,
c.subcategory,
c.class,
c.package_desc2,
c.unit_name,
c.good,
c.how_good
HAVING MIN(c.eff_price) > 0) AS d
ON b.store_name = d.store_name
AND b.category = d.category
AND b.subcategory = d.subcategory
AND b.class = d.class
AND b.package_desc2 = d.package_desc2
AND b.unit_name = d.unit_name
AND CASE
WHEN b.good = 'good'
OR b.how_good = 1 THEN 'YES'
ELSE 'NO'
END = d.chk
AND b.eff_price = d.low
WHERE store_name = 'some store'
AND brand_name NOT LIKE '%name%'
AND weeks = 'Last 12 weeks'
AND (eff_pricetype = 'REG'
OR eff_pricetype = 'EDV'
OR eff_pricetype = 'GBC'
OR eff_pricetype = 'CMP'
OR eff_pricetype = 'LIN'
OR eff_pricetype = 'FRZ'
OR eff_pricetype = 'GBB'
OR eff_pricetype = 'EDLP'
OR eff_pricetype = 'GBN'
OR eff_pricetype = 'GBR'
OR eff_pricetype = 'MKT'
OR eff_pricetype = 'COMP'
OR eff_pricetype = 'R'
OR eff_pricetype = 'COM')
AND (family = 'carrots'
OR family = 'tomatoes'
OR family = 'Cheese'
OR family = 'Coffee'
OR family = 'peppers'
OR family = 'milk'
OR family = 'oil'
OR family = 'season'
OR family = 'Housewares'
OR family = 'paper'
OR family = 'Meat'
OR family = 'soup'
OR family = 'nuts'
OR family = 'pizza'
OR family = 'potatoes'
OR family = 'Seafood'
OR family = 'beer'
OR family = 'vitamins'
OR family = 'Tea'
OR family = 'Wine'
OR family = 'beans')
GROUP BY b.zone_name,
b.store_name,
b.family,
b.category,
b.subcategory,
b.class,
b.team,
b.subteam,
b.pos_dept,
b.brand_name,
b.item_description,
b.upc,
b.package_desc1,
b.package_desc2,
b.unit_name,
d.org,
b.eff_pricetype,
b.eff_price,
b.cd,
b.cu,
b.cgm,
b.deleted_item,
b.discontinue_item,
b.not_available,
b.remove_item,
b.recall_flag,
d.low,
b.good,
b.how_good
テーブルの構造とインデックスを与えることはできますか?また、データ構造に問題があり、決して実行されない可能性があります。店舗は独自のテーブルで、どのようにカテゴリとサブカテゴリとファミリとeff_pricetypeを構成するかによって異なります。 – Luis
ええ、それは厳しいです。 reg_data_cubeは実際にはインデックスのないビューです。ビューを構成するテーブルには独自のインデックスがありますが、ビューにしかアクセスできず、変更できません。 : –
EXPLAINをチェックしてくださいが、インデックスなしで改善するためにできることはあまりありません。 – Luis