让表名“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;
输出:
所以我需要在“疾病确认栏”下面的以下值 重新接受心电图 是 重新分配给3位心脏病专家 重复心电图 重新分配给1位心脏病专家 没有 重新分配给2位心脏病专家
但根据我的查询,我有1个月的时间段,因此该时间段的列中不存在上述某些值。
所以,如果列中不存在,则需要输出中的所有值,如null'0'。
答案 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