大家好,我有一张包含产品和价格的表格。我想做的就是显示每种产品的最低价格,如果价格表中不存在,则显示价格为空的产品这是我编写的查询
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
现在它只显示那些价格为空的其他语句不起作用。
最佳答案
另一个答案很接近...您可能需要通过额外的 LEFT-JOIN 到您的 ELSE 子选择来完成此操作...
左连接 ( 选择 价格.unic, MIN(价格.价格) 作为最低价格 从 价格 在哪里 Price.CatText = '轴承' 通过...分组 价格.unic ) ByUnic ON sc_products.unic = ByUnic.unic
然后将其删除,而不是您的 case/when 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
关于mysql - else 语句在 mysql 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38121293/