2016-06-30 23 views
0

大家好,我已經爲他們的產品和價格表。所有我試圖做的是展現每種產品的最低價格,如果它是不存在的價格表顯示產品,價格空下面是一個查詢我寫其他語句在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 

現在,只有那些價格顯示爲空其他語句不起作用。

+1

請格式化查詢 – nbirla

回答

0

在你case必須使用THEN NULL,不THEN price.Price IS NULL

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) ) 

和最終選擇分鐘(your_value)應該在select子句中,而不是在where中。

+0

非常感謝你,但現在它顯示只有那些產品的價格。有什麼方法可以展示他們嗎? – user3237076

+0

我已經更新了價格不爲空的答案.. – scaisEdge

+0

謝謝,但可悲的結果是一樣的。 – user3237076

0

對方回答很接近......你可能會需要通過做這個額外的左JOIN您ELSE子選擇是什麼...

LEFT JOIN (SELECT price.unic, MIN(price.Price)作爲minprice FROM 價格 WHERE price.CatText = '軸承' 組由 price.unic)ByUnic ON sc_products.unic = ByUnic.unic

,然後INSTEAD你的情況/ WHERE子句時,將其刪除。更改字段選擇屬性,將價格從... price.price更改爲:

COALESCE(price.Price, ByUnic.minPrice) as Price 

這將首先返回price.price字段。如果該值爲null,則返回左連接表ByUnic的值,如果它存在則爲minPrice結果,否則仍然爲null。如果您在Price.Price之前想的最低價格第一,只是交換領域爲了如

COALESCE(ByUnic.minPrice, price.Price) as Price