Michi :
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));