6

我正在尝试在 MySQL 中构建一个查询,其中我有一个数字库存水平,并且取决于该库存水平是什么,我希望它返回另一个值,该值将是一个颜色代码。

例如,如果库存水平<0,则为空,如果库存水平在0和1000之间,则为红色,如果库存水平在1000和5000之间,则为黄色,如果库存水平在5000和10000之间,则为绿色,如果库存水平> 10000,则绿色。

所以这是我的例子。我有一个包含 Beer 信息的 Beer 表和一个包含 Stock Values 的 BeerStock 表。

SELECT Beer.Beer, Beer.Brewery, Beer.Style, Beer.ABV, Beer.Hops, Beer.SRM,
Sum(BeerStock.Quantity)
FROM Beer, BeerStock
Where Beer.Beer = BeerStock.Beer

那会给我这样的东西:

Beer1 Brewery1 Style1 5%, 3, 10, 1238

而且我要

Beer1 Brewery1 Style1 5%, 3, 10, 1238 YELLOW

我似乎根本无法弄清楚这一点,我应该使用 CASE 还是可以使用 IF/THEN 类型的东西?

我的 SQL 技能很生疏,通常我使用 Access 并弄乱自动生成的 SQL,而不是从头开始编写……我可以应付 MySQL 的基础知识,但不是这种东西!

任何建议/指针表示赞赏....

谢谢

安迪

4

2 回答 2

10

我瘦你的意思是如果stock > 1000再另一种颜色not green

SELECT  Beer.Beer, 
        Beer.Brewery, 
        Beer.Style, 
        Beer.ABV, 
        Beer.Hops, 
        Beer.SRM,
        Sum(BeerStock.Quantity) totalQuantity,
        CASE WHEN Sum(BeerStock.Quantity) < 0 THEN ''
            WHEN Sum(BeerStock.Quantity) BETWEEN 0 AND 999 THEN 'Red'
            WHEN Sum(BeerStock.Quantity) BETWEEN 1000 AND 4999 THEN 'Yellow'
            WHEN Sum(BeerStock.Quantity) BETWEEN 5000 AND 9999 THEN 'GREEN'
            WHEN Sum(BeerStock.Quantity) >= 10000 THEN 'Another Color' 
        END
FROM    Beer
        INNER JOIN BeerStock
            ON Beer.Beer = BeerStock.Beer
-- Where    ..other conditions..

但如果你真的是那个意思

SELECT  Beer.Beer, 
        Beer.Brewery, 
        Beer.Style, 
        Beer.ABV, 
        Beer.Hops, 
        Beer.SRM,
        Sum(BeerStock.Quantity) totalQuantity,
        CASE WHEN Sum(BeerStock.Quantity) < 0 THEN ''
            WHEN Sum(BeerStock.Quantity) BETWEEN 0 AND 999 THEN 'Red'
            WHEN Sum(BeerStock.Quantity) BETWEEN 1000 AND 4999 THEN 'Yellow'
            WHEN Sum(BeerStock.Quantity) >= 5000 THEN 'GREEN'
        END
FROM    Beer
        INNER JOIN BeerStock
            ON Beer.Beer = BeerStock.Beer
-- Where    ..other conditions..

还有一件事,您还需要使用GROUP BY子句,否则即使您有不同的记录,您也只会返回一条记录,

SELECT  Beer.Beer, 
        Beer.Brewery, 
        Beer.Style, 
        Beer.ABV, 
        Beer.Hops, 
        Beer.SRM,
        Sum(BeerStock.Quantity) totalQuantity,
        CASE WHEN Sum(BeerStock.Quantity) < 0 THEN ''
            WHEN Sum(BeerStock.Quantity) BETWEEN 0 AND 999 THEN 'Red'
            WHEN Sum(BeerStock.Quantity) BETWEEN 1000 AND 4999 THEN 'Yellow'
            WHEN Sum(BeerStock.Quantity) BETWEEN 5000 AND 9999 THEN 'GREEN'
            WHEN Sum(BeerStock.Quantity) >= 10000 THEN 'Another Color' 
        END
FROM    Beer
        INNER JOIN BeerStock
            ON Beer.Beer = BeerStock.Beer
-- Where    ..other conditions..
GROUP   BY Beer.Beer, 
        Beer.Brewery, 
        Beer.Style, 
        Beer.ABV, 
        Beer.Hops, 
        Beer.SRM
于 2013-04-01T14:20:29.850 回答
0

这样的事情应该使用以下CASE语句起作用:

SELECT Beer, Brewery, Style, ABV, SRM, SummedQty, 
    CASE 
       WHEN SummedQty >=0 AND SummedQty <= 1000 THEN ' RED'
       WHEN SummedQty >1000 AND SummedQty <= 5000 THEN ' YELLOW'
       WHEN SummedQty >5000 THEN ' GREEN'
       ELSE ''
    END yourcolor
FROM (
    SELECT Beer.Beer, Beer.Brewery, Beer.Style, Beer.ABV, Beer.Hops, Beer.SRM,
       Sum(BeerStock.Quantity) SummedQty
    FROM Beer
       INNER JOIN BeerStock  
          ON Beer.Beer = BeerStock.Beer
    ) t

小心使用BETWEEN- 它可能不会返回您想要的结果。我更喜欢使用大于和小于。我还将您的 JOIN 语法转换为INNER JOIN.

于 2013-04-01T14:20:42.337 回答