0
点赞
收藏
分享

微信扫一扫

SQL每日一题(20220407)

棒锤_45f2 2022-04-13 阅读 62
sql

题目

有如下一张表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博客

结果

 

举报

相关推荐

SQL每日一题(20220216)

SQL每日一题(20210617)

SQL每日一题(20201014)

SQL每日一题(20220217)

SQL每日一题(20210524)

SQL每日一题(20220316)

0 条评论