2016-06-30 3 views
0

こんにちはすべて私はそれらのための製品と価格のテーブルがあります。私がやろうとしていますすべては、各製品の最低価格を表示することです、それはここで価格はnullとの価格表のショーの製品に存在しない場合、私はelse文がmysqlで動作しません

SELECT 
t15_catalogue_line.T15_GROUP, sc_products.product_code,sc_products.unic, 
sc_products.name_ru, UPPER(TRIM(sc_products.brief_description_ru)) AS 
brief_description_ru, sc_products.suupplier, price.Price, 
sc_group_discounts.`action`, sc_group_discounts.procent, 
sc_products.productID, price.in_stock, price.supplier, t10_item.T10_ITEM, 
t10_item.unic, t10_item.T10_DESC, t10_item.T10_IMG, t10_item.T10_ITEM_GROUP, 
t10_item.T10_FIELD1, t10_item.T10_FIELD2, t10_item.T10_FIELD3, 
t10_item.T10_FIELD4, t10_item.T10_FIELD5, t10_item.T10_FIELD6, 
t10_item.T10_FIELD7, t10_item.T10_FIELD8, t10_item.T10_FIELD9, 
t10_item.T10_FIELD10, t10_item.T10_FIELD11, t14_item_fields.T14_ITEM_GROUP, 
t14_item_fields.T14_FIELD, t14_item_fields.T14_NAME, 
t14_item_fields.T14_UNIT, t14_item_fields.T14_SEARCH 
FROM sc_products 
LEFT OUTER JOIN t15_catalogue_line ON (sc_products.unic = t15_catalogue_line.unic) 
LEFT OUTER JOIN price ON (sc_products.product_code = price.item) AND (sc_products.suupplier = price.postavchik) 
LEFT OUTER JOIN sc_group_discounts ON (sc_products.item_group = sc_group_discounts.item_group) 
LEFT OUTER JOIN t10_item ON (sc_products.unic = t10_item.unic and sc_products.CatText=t10_item.CatText) 
LEFT OUTER JOIN t14_item_fields ON (t10_item.T10_ITEM_GROUP = t14_item_fields.T14_ITEM_GROUP) 
WHERE sc_products.CatText = 'bearing' 
AND t15_catalogue_line.T15_CARTYPE = '42769' 
AND t15_catalogue_line.T15_GROUP = '546678' and sc_products.unic is not null and sc_products. unic!='' and 
CASE WHEN price.Price is null then price.Price is null else price.Price=(SELECT 
MIN(price.Price) from price where price.unic=sc_products.unic 
AND price.CatText='bearing') end 
GROUP BY sc_products.unic 
ORDER by isnull (price.Price),price.Price ASC 

を書いたクエリは、今では、価格のヌルとのみを示していますelseステートメントが機能しませんでした。

が代わりにエンド例
AND CASE 
     WHEN price.Price IS NULL THEN NULL 
     ELSE 
      (
       SELECT 
        MIN(price.Price) 
       FROM 
        price 
       WHERE 
        price.unic = sc_products.unic 
       AND price.CatText = 'bearing' 
      ) 
    END 

あなたはこのように、AND条件を使用する必要があります:

AND ( (price.CatText = 'bearing' AND price.unic = sc_products.unic) 
     OR (price.CatText = 'bearing' AND price.unic is numm) ) 

と分の最終的選択をあなたのcaseあなたがTHEN NULL、ないTHEN price.Price IS NULL使用しなければならないで

+1

としてフィールドの順序を入れ替えるクエリ – nbirla

答えて

0

(your_value)はselect句に入れる必要があります。

+0

をフォーマットしてくださいありがとうございましたが、今では価格と製品のみを示しています。それらをすべて表示する方法はありますか? – user3237076

+0

私は価格がヌルではない答えを更新しました.. – scaisEdge

+0

ありがとうございますが、悲しいことに結果は同じです。 – user3237076

0

他の答えは接戦だった...あなたはおそらく経由でこれを行う必要があります追加のLEFT JOINの-

LEFT JOINの ( がprice.unic SELECT ...あなたのELSEサブ選択が何であるかを、 次いでminpriceとしてMIN(price.Price) 価格 WHERE price.CatText = price.unic によって 'ベアリング' 群)ByUnic ON sc_products.unic = ByUnic.unic FROM

と代わりにあなたのケースの/ WHERE句は、それを削除します。フィールドの選択プロパティを変更して価格をprice.priceから

に変更します。これでprice.priceフィールドが最初に戻ります。それがnullの場合は、左結合表ByUnicの値を返します。minPrice結果が存在する場合はそれを返し、それ以外の場合はnullのままです。あなたが最初Price.Price前に最低価格をしたい場合は、ちょうどそのような

COALESCE(ByUnic.minPrice, price.Price) as Price 
関連する問題