2016-06-30 7 views
0

Hallo alles, was ich habe Tabelle mit Produkten und Preisen für sie. Alles, was ich bin versucht, ist Mindestpreis für jedes Produkt zu zeigen, und wenn es nicht im Preis Tabelle zeigt Produkt mit Preis null Hier ist eine Abfrage, die ichelse Anweisung funktioniert nicht in 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 

Jetzt zeigt es nur die mit Preis Null geschrieben else Anweisung hat nicht funktioniert.

+1

Formatieren Sie die Abfrage – nbirla

Antwort

0

In Ihrem case Sie verwenden müssen THEN NULL, nicht 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 

Statt Ende Fall sollten Sie eine AND Bedingung verwenden, wie folgt aus:

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

und eine schließlich wählen Sie von min (Ihr_Wert) sollte in Select-Klausel sein und nicht in Where.

+0

Vielen Dank, aber jetzt zeigt es nur die Produkte mit Preis. Gibt es eine Möglichkeit, sie alle zu zeigen? – user3237076

+0

Ich habe Update die Antwort für den Preis nicht null .. – scaisEdge

+0

Vielen Dank aber leider Ergebnis ist das gleiche. – user3237076

0

Die andere Antwort war in der Nähe ... Sie werden wahrscheinlich müssen diese über eine zusätzliche LEFT-JOIN tun, was Ihre ELSE Unterauswahl ist ...

LEFT JOIN (SELECT price.unic, MIN (price.Price) als minprice FROM Preis WHERE price.CatText = 'Lager' Gruppe von price.unic) ByUnic ON sc_products.unic = ByUnic.unic

und dann STELLEN Sie von Ihrer Fall/WHERE-Klausel, entfernen Sie es. Ändern Sie die Feldauswahl Eigenschaft immer Ihr Preis ab ... price.price zu:

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

Dies wird die price.price Feld zuerst zurück. Wenn das null ist, gibt es den Wert aus der linksseitigen Join-Tabelle ByUnic zurück, minPrice-Ergebnis, wenn es existiert, andernfalls bleibt es als null. Wenn Sie den Mindestpreis zuerst vor dem Price.Price möchten, tauschen Sie das Feld, um wie

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