SQL JOIN表并显示3类结果

问题描述 投票:-1回答:1

将结果显示为3个类别

create table test
(
    Type varchar(10),
    CheckFlag varchar(10),
    ID varchar(10)
)

Insert into test
values
('A','Yes','1'),
('A','Yes','2'),
('A','No','5'),
('A','No','6'),
('A','No','7'),
('B','Yes','8'),
('B','No','8'),
('B','No','9'),
('C','Yes','10'),
('C','Yes','11'),
('C','Yes','12'),
('C','No','10'),
('C','No','11'),
('C','No','12'),
('D','Yes','13'),
('D','Yes','14'),
('D','Yes','17'),
('D','No','14'),
('D','No','15'),
('D','No','16'),
('E','Yes','18'),
('E','Yes','19'),
('E','No','20'),
('E','No','21')

select    distinct T1.Type
          ,case when count(*) = count(T2.ID)
then      'In'
else 
           'Using in and out'
end 
from       test T1
left join  (select * from test
where      CheckFlag= 'No') T2 
on         T1.Type= T2.Type
and        T1.ID = T2.ID
Where      T1.CheckFlag= 'Yes'
group by   T1.Type

预期产出:

Type      Category 
A         Out 
B         In
C         In
D         Out & In
E         Out 

这是现有的逻辑,B类的分类,C&D是正确的,但A&E并不准确。这里的目标是显示每个类型,例如A,B,C,D,E每个ID用于检查标志是否存在于每个DI中用于检查标记号。

例如,

  1. 对于类型A,是ID值为1,2,无ID值为5,6。由于NO ID 5,6中没有Yes ID 1,2。分配类别“Out”。
  2. 对于D型,是 - ID是13,14,17和否 - ID是14,15,16。这里有14个来自无ID - 分配类别“out and in”
  3. 例如,类型B,是ID为8,无ID为8,9。由于是ID 8出现在无ID中,然后分配“在”。
  4. 例如,键入C.是 - ID - 10,11,12和否 - ID - 10,11,12。所有Yes ID都出现在No ID中,然后分配“In”。
sql select join
1个回答
0
投票

你很亲密

如果“是”的NONE在“否”中,则需要“OUT”。那是:

 WHEN COUNT(T2.ID) = 0 THEN 'OUT'

如果“是”中的某些(但不是全部)是“否”,则需要“OUT&IN”。那是:

 WHEN COUNT(T2.ID) > 0 AND COUNT (T2.ID) < COUNT(*) THEN "OUT & IN"

当所有“是”都在“否”时,你想要“IN”。这就是其他一切:

 ELSE 'In'
© www.soinside.com 2019 - 2024. All rights reserved.