すべてのCASE文の条件がfullfilledされている場合にのみ表示行

Michi :

DB-フィドル

CREATE TABLE sales (
    id int primary key,
    campaign VARCHAR(255),
    date_offered VARCHAR (255),
    date_sold VARCHAR (255), 
    quantity_offered VARCHAR(255),
    quantity_sold VARCHAR(255),
    value_offered VARCHAR(255),
    value_sold VARCHAR(255)
);

INSERT INTO sales
(id, campaign,
date_offered, date_sold,
quantity_offered, quantity_sold,
value_offered, value_sold
)
VALUES 
("1", "C001", "2019-02-06", "2019-02-10", "500", "600", "4000", "4800"),
("2", "C002", "2019-04-15", "2019-04-12", "400", "800", "3200", "6400"),
("3", "C003", "2019-06-23", "2019-03-19", "650", "700", "5200", "5600"),
("4", "C004", "2019-08-09", "2019-08-22", "250", "150", "1750", "1050"),
("5", "C005", "2019-11-12", "2020-01-15", "860", "450", "6020", "3150"),
("6", "C006", "2020-01-30", "2019-12-18", "130", "280", "1170", "2520"),
("7", "C007", "2020-02-17", "2019-11-23", "470", "400", "4230", "3600");

表では上記の私はと識別することを、いくつかのミスですCASE。このクエリ内のステートメントは:

SELECT
id,
campaign,
(CASE WHEN DATE(date_offered) > DATE(date_sold) THEN "Error" ELSE "OK" END) AS Check_Date,
(CASE WHEN SUM(quantity_offered) < SUM(quantity_sold) THEN "Error" ELSE "OK" END) AS Check_Quantity,
(CASE WHEN SUM(value_offered)/SUM(quantity_offered) > 10 THEN "Error" ELSE "OK" END) AS Check_Price_01,
(CASE WHEN SUM(value_sold)/SUM(quantity_sold) > 7 THEN "Error" ELSE "OK" END) AS Check_Price_02
FROM sales
GROUP BY 1;

すべてこれはまさに私がそれを必要とするように動作します。


今、私は変更するresultクエリのはこれだけrowsその少なくとも一つのエラーが含まれているが、結果に残ります。
すべての値がOKであればrow、表示すべきではありません。

id  campaign       Check_Date      Check_Quantity       Check_Price_01     Check_Price_02
1   C001            OK              Error                OK                 Error
2   C002            Error           Error                OK                 Error
3   C003            Error           Error                OK                 Error
6   C006            Error           Error                OK                 Error
7   C007            Error           OK                   OK                 Error

どのように私はこれを達成するために私のクエリを変更する必要がありますか?

厳しいです:

ここでの解決策は、使用しているhaving句を

SELECT
id,
campaign,
(CASE WHEN DATE(date_offered) > DATE(date_sold) THEN "Error" ELSE "OK" END) AS Check_Date,
(CASE WHEN SUM(quantity_offered) < SUM(quantity_sold) THEN "Error" ELSE "OK" END) AS Check_Quantity,
(CASE WHEN SUM(value_offered)/SUM(quantity_offered) > 10 THEN "Error" ELSE "OK" END) AS Check_Price_01,
(CASE WHEN SUM(value_sold)/SUM(quantity_sold) > 7 THEN "Error" ELSE "OK" END) AS Check_Price_02
FROM sales
GROUP BY 1
HAVING ('Error' IN (Check_Date, Check_Quantity, Check_Price_01, Check_Price_01));

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=21420&siteId=1