2017-06-06 27 views
0

這裏是我的數據:我可以將此銷售比較分爲單列嗎?

CREATE TABLE SALES (
    ts TIMESTAMP NOT NULL, 
    name VARCHAR(50) NOT NULL, 
    quantity INTEGER, 
    price DECIMAL(2,2) 
); 

INSERT INTO SALES VALUES 
    ("2017-02-08 13:38:02", "apple", 6, 4.38), 
    ("2017-02-08 13:38:02", "banana", 10, 3.50), 
    ("2017-02-08 13:38:02", "orange", 8, 2.98), 
    ("2017-02-08 09:21:52", "banana", 6, 2.67), 
    ("2017-02-08 09:21:52", "pear", 3, 2.00), 
    ("2017-02-07 15:21:32", "apple", 6, 4.38), 
    ("2017-02-07 15:21:32", "banana", 6, 2.67), 
    ("2017-02-07 11:03:16", "orange", 8, 2.98), 
    ("2017-02-07 11:03:16", "banana", 4, 1.17); 

我想今天拿到的銷量,但不是昨天的項目。

我可以用得到它們在2列:

select 
    name, 
    SUM(case when strftime('%Y-%m-%d', sales_ts) = '2017-02-08' then quantity else 0 end) as today, 
    SUM(case when strftime('%Y-%m-%d', sales_ts) = '2017-02-07' then quantity else 0 end) as yday 
from sales 
group by name 
having yday = 0 

結果:

| name | today | yday 
--------------------- 
| pear | 3 | 0 

但我怎麼能得到的只是2列,1名及1名爲 「sold_today_but_not_yday」 用真/假值?那可能嗎? (最好不使用子查詢)。

+0

您的代碼似乎是SQLite的。 SQLite沒有布爾列。 0/1的整數是否滿足您的需求? –

+0

是的,0和1都很好!謝謝。 – LittleBobbyTables

回答

1

您可以使用case

select name, 
     (case when SUM(case when strftime('%Y-%m-%d', sales_ts) = '2017-02-08' then quantity else 0 end) > 0 and 
        SUM(case when strftime('%Y-%m-%d', sales_ts) = '2017-02-07' then quantity else 0 end) = 0 
      then 1 else 0 
     end) as isTodayNotYesterday 
from sales 
group by name; 
+0

在末尾有HAVING的錯字,否則謝謝! – LittleBobbyTables

相關問題