簡體   English   中英

如何將查詢結果合並到新表的列中

[英]How to combine results from a query into columns of a new table

我有一個日期列表,我試圖找到過期/接近過期的日期和確定日期,並建立一個顯示這些日期的新表。

對我而言,最簡單的方法是簡單地查詢數據庫三遍,並在我的應用程序中構建預期的結果。 我只是想知道SQL是否會更干凈。

我只設法產生了三個截然不同的正確結果,但是我需要最終結果在它自己的表中。

我有一個SQLFiddle顯示到目前為止我已經做了什么http://www.sqlfiddle.com/#!18/c7b1a/1

我的桌子是

CREATE TABLE certificates (
    ValidTo DATETIME
);

數據是

INSERT INTO certificates (ValidTo) VALUES ('2019-05-12') -- expired
INSERT INTO certificates (ValidTo) VALUES ('2019-06-20') -- due
INSERT INTO certificates (ValidTo) VALUES ('2019-06-25') -- due
INSERT INTO certificates (ValidTo) VALUES ('2020-01-25') -- ok
INSERT INTO certificates (ValidTo) VALUES ('2020-03-25') -- ok
INSERT INTO certificates (ValidTo) VALUES ('2020-03-05') -- ok

到目前為止,我想出的SQL是

select count(*) [Expired] from certificates where ValidTo < '2019-06-12'
GO
select count(*) [Due] from certificates where ValidTo >= '2019-06-12' and ValidTo <= '2019-07-12'
GO
select count(*) [OK] from certificates where ValidTo > '2019-07-12'

但是,這顯然將顯示三個單獨的結果。

理想情況下,我希望每個結果都在新表的列中

我的預期結果是

Expired   Due   OK
1         2     3

其中Expired = 1,因為第一個SQL查詢返回1

其中Due = 2,因為第二個SQL查詢返回2

OK = 3,因為第三個SQL查詢返回3

在表達式時使用條件聚合和大小寫

演示

select 
   count(case when ValidTo < '2019-06-12' then 1 end) as [Expired],
   count(case when ValidTo >= '2019-06-12' and ValidTo <= '2019-07-12' then 1 end) as [Due],
   count(case when ValidTo > '2019-07-12' then 1 end) as [OK]
from certificates 

輸出:

Expired Due OK
1       2   3

或者,這樣您可以每天運行查詢而無需更改,請嘗試:

SELECT 
  SUM( 
    CASE validto 
      WHEN CURRENT_DATE 
      THEN 1 
    END ) AS expired
, SUM( 
    CASE 
      WHEN validto > CURRENT_DATE 
       AND validto <= TIMESTAMPADD(MONTH,1,CURRENT_DATE) 
      THEN 1 
    END) AS due
, SUM( 
    CASE 
      WHEN validto > TIMESTAMPADD(MONTH,1,CURRENT_DATE) 
      THEN 1 
    END) AS ok
FROM certificates;
-- out  expired | due | ok 
-- out ---------+-----+----
-- out        1 |   2 |  3
-- out (1 row)
-- out 
-- out Time: First fetch (1 row): 4.434 ms. All rows formatted: 4.466 ms

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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