Postgresql:如果在列中不存在行值,如何在输出中插入行值

时间:2016-02-16 07:46:25

标签: sql postgresql

让表名“box”框中的

1. pen
2. pencil
3. eraser
4. sharpener
5. scale

但是SQL表可能是这样的,

s no.___    item____  quantity

 1 _____       pen_____     2

 2 ____      pencil____   3

 3____      eraser____    5

我需要一个查询,它给出了以下输出

item______      quantity

pen ______          2

pencil ____       3

eraser ____       5

sharpener__     0

scale   ____      0

这是我现在正在使用的查询

选择CASE disease_confirmed 什么时候“转发EMMINENT心脏病专家”然后“在10分钟内重复心电图” 什么时候'是'然后'是' 什么时候'不'然后'不' 当'重新接受心电图'然后'重新接受心电图'时 当'重新分配给1名心脏病专家'然后'重新分配给1名心脏病专家'时 当'重新分配给2名心脏病专家'然后'重新分配给2位心脏病专家'时 当'重新分配给3名心脏病专家'然后'重新分配给3位心脏病专家'时

END AS disease_confirmed,

来自immi_referral_tb的

count(disease_confirmed)其中created_date> ='2015-11-01 00:00':: timestamp AND created_date< ='2015-11-30 23:59':: timestamp group by disease_confirmed 联合所有 选择'总计',计数(疾病确认) 来自immi_referral_tb,其中created_date> ='2015-11-01 00:00':: timestamp AND created_date< ='2015-11-30 23:59':: timestamp;

输出:

click here for output image

所以我需要在“疾病确认栏”下面的以下值 重新接受心电图 是 重新分配给3位心脏病专家 重复心电图 重新分配给1位心脏病专家 没有 重新分配给2位心脏病专家

但根据我的查询,我有1个月的时间段,因此该时间段的列中不存在上述某些值。

所以,如果列中不存在,则需要输出中的所有值,如null'0'。

1 个答案:

答案 0 :(得分:2)

您可以创建另一个包含预期项目和左连接的表格:

CREATE TABLE expected (item VARCHAR(10));

INSERT INTO expected
VALUES ('pen'), ('pencil'), ('eraser'), ('sharpener'), ('scale');

SELECT    e.item, COALESCE(b.quantity, 0)
FROM      expected e
LEFT JOIN box b ON e.item = b.item

如果您不想创建另一个表,可以使用选择硬编码文字的查询:

SELECT    e.item, COALESCE(b.quantity, 0)
FROM      (SELECT 'pen' AS item
           UNION ALL
           SELECT 'pencil'
           UNION ALL
           SELECT 'eraser'
           UNION ALL
           SELECT 'sharpener'
           UNION ALL
           SELECT 'scale') e
LEFT JOIN box b ON e.item = b.item