SQL每日一题(20220407)

题目

有如下一张表F0407

当001值是‘否’且002子项为‘空’时均不显示记录;

当001值是‘是’且002子项有记录时均不显示记录;

当001值是‘是’且002子项为‘空’时显示002该行空记录;

当001值是‘空’且002子项为‘空’时都显示记录;

最终理想的查询结果:

测试数据

CREATE TABLE F0407
(
ID INT,
CODE VARCHAR(10),
QUESTION VARCHAR(20),
ANSWER VARCHAR(10)
)

INSERT INTO F0407 VALUES
(1,'001','是否吸烟','否'),
(1,'002','吸烟年龄',NULL),
(2,'001','是否吸烟','是'),
(2,'002','吸烟年龄','18'),
(3,'001','是否吸烟','是'),
(3,'002','吸烟年龄',NULL),
(4,'001','是否吸烟',NULL),
(4,'002','吸烟年龄',NULL)

我的答案

with F0407Temp AS(
SELECT *
FROM F0407 
WHERE CODE = '001' AND (ANSWER IS NULL OR ANSWER = '是')
)

select t1.*
from F0407 t1
inner join F0407Temp t2 on t2.id = t1.id
where t1.ANSWER is null

想法 

       我是这样想的,给的条件里要001为‘是’的或者为空的,那么我先找出这些数据,数据已经按ID分组好了,那么我直接查出001为‘是’的或者为空的行,取ID关联原表,再根据需要查002是空的条件,可以过滤掉001的行,就可得到查询结果。

        这次的练习好像没有用的什么知识点函数,唯一有的可能就是WITH AS这个上图中F0407Temp 完全可以用with as 里面的内容代替掉,图中这样写只是方便观看。

WITH AS 函数用法的可以参考已有的大佬写的内容:数据库:SQLServer中with as 用法笔记_郝光明的博客-CSDN博客

结果

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值