簡體   English   中英

返回特定列的情況

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM