[英]Return specific column case when
如果產品是報價並且價格最低,則返回特定列。
我正在創建一個產品價格比較的應用程序。 我已經獲得了產品清單和特定產品的最低價格。 但是,在一天之內,產品可以設置為報價,並且具有所有其他產品的最低價格。 當發生這種情況時,我必須向用戶確認這樣的信息 - 帶有標志或類似的東西。
我正在考慮使用查詢本身來做這個行為 - 但我不知道,有時似乎這種做法是不一致的,因為如果產品沒有發售,不知道我將如何在C#中處理這個問題等待productState
列。 我需要建議(當然還有語法,因為我不知道[再次])。
我正在使用C#.NET + MVC 4 + MySQL +實體框架5 +存儲過程+ Razor引擎。
以下片段返回產品清單的最低價格以進行比較:
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then
marketProducts.ProductOriginalPrice
Else
Least(
marketProducts.ProductPromotionalPrice,
marketProducts.ProductOriginalPrice
)End) As minProductPrice,
但是,我想做這樣的事情(當然 - 語法錯誤,但“工作”來說明):
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then
marketProducts.ProductOriginalPrice
Else
marketProducts.ProductState = 1 As productState, /*
This is a normal
column.
1 means that
the product is on
offer.
*/
Least(
marketProducts.ProductPromotionalPrice,
marketProducts.ProductOriginalPrice
)End) As minProductPrice,
完整查詢:
CREATE DEFINER=`root`@`localhost` PROCEDURE `getProductsList`(IN `categoryId` INT, IN `productState` INT)
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
Select product.Id As productId,
product.Name As productName,
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then marketProducts.ProductOriginalPrice Else
Least(marketProducts.ProductPromotionalPrice, marketProducts.ProductOriginalPrice)
End) As minProductPrice,
measure.Name As measureName,
measure.Abbreviation As measureAbbreviation,
productsImages.ProductImageThumbnail As thumbnailUrl,
product.InMarketsQuantity as numberOfMarketsThatHaveThisProduct
From bm_market_products as marketProducts
Join bm_products As product On marketProducts.ProductId = product.Id
Join bm_categories As category On product.CategoryId = category.Id
Join bm_measures As measure On product.MeasureId = measure.Id
Join bm_products_images As productsImages On product.Id = productsImages.ProductId
WHERE (productState Is Null Or marketProducts.ProductState = productState)
And (categoryId Is Null Or category.Id = categoryId)
Group By marketProducts.ProductId;
END
此過程返回以下內容:
有任何想法嗎?
你的語法錯誤的原因是你有時在一個空格中填充兩列。 解決方案是始終具有如下所示的兩列:
Select product.Id As productId,
product.Name As productName,
Min(Case When marketProducts.ProductPromotionalPrice = 0
Then marketProducts.ProductOriginalPrice Else
Least(marketProducts.ProductPromotionalPrice, marketProducts.ProductOriginalPrice)
End) As minProductPrice,
Min(Case When marketProducts.ProductPromotionalPrice = 0
and marketProducts.ProductPromotionalPrice < marketProducts.ProductOriginalPrice
Then 0 Else 1
End) As productState,
measure.Name As measureName,
measure.Abbreviation As measureAbbreviation,
productsImages.ProductImageThumbnail As thumbnailUrl,
product.InMarketsQuantity as numberOfMarketsThatHaveThisProduct
From bm_market_products as marketProducts
Join bm_products As product On marketProducts.ProductId = product.Id
Join bm_categories As category On product.CategoryId = category.Id
Join bm_measures As measure On product.MeasureId = measure.Id
Join bm_products_images As productsImages On product.Id = productsImages.ProductId
WHERE (productState Is Null Or marketProducts.ProductState = productState)
And (categoryId Is Null Or category.Id = categoryId)
Group By marketProducts.ProductId;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.