从具有不同条件的同一表中选择字段

时间:2015-06-10 07:05:40

标签: mysql sql plsql

我正在使用sql语言。我试图从一张表中选择一些具有不同条件的字段。

query1:

   select PersonID,Name,count(PersonID) as column3 from Persons
   where (b1=true  or b2=true) and workingdays<100
   group by PersonID 

查询2:

  select PersonID,Name,b1+b2   as column4   from Persons
   where (b1=1 or b2=1) 
   group by PersonID) as secondset
   on baseset.PersonID=secondset.PersonID 

现在我要添加column3column4

我使用了以下查询:

select 
  baseset.PersonID,
  baseset.Name,
  firstset.column3,
  secondset.column4,
  COALESCE(firstset.column3,0)+ COALESCE(secondset.column4,0) as column5
from
  (select PersonID,Namefrom Persons
   where b1=true  or b2=true)as baseset
left outer join
   (select  PersonID,Name,count(PersonID) as column3 from Persons
    where (b1=true  or b2=true) and workingdays<100
    group by PersonID
   ) as firstset
   on baseset.PersonID=firstset.PersonID
left outer join
   (select  PersonID, Name,b1+b2   as column4  from Persons
    where (b1=1 or b2=1) 
    group by PersonID
    )as secondset
   on baseset.PersonID=secondset.PersonID

我得到了答案。但是除了上面提到的以外,还有其他方法可以添加这些字段吗?有人有什么想法吗?

SQLFIDDLE:http://sqlfiddle.com/#!9/4321f/22

`

2 个答案:

答案 0 :(得分:2)

试试这个

SqlFiddle

 select  PersonID, Name,
 case when ((b1=true  or b2=true) and workingdays<100)
 then
    count(PersonID)
 end as column3,
 case when ((b1=1 or b2=1))
 then
    b1+b2  
 end as column4,
 case when (((b1=true  or b2=true) and workingdays<100) and (b1=1 or b2=1))
 then 
    count(PersonID) + b1+b2 
 when ((b1=true  or b2=true) and workingdays<100)
 then
    count(PersonID) 
 when ((b1=1 or b2=1))
 then
     b1+b2  
 end
 as column5 
 from Persons
 where (((b1=true  or b2=true) and workingdays<100) or (b1=1 or b2=1))
 group by PersonID

答案 1 :(得分:0)

select PersonID, Name, column3, column4, column3 + column4 as column5
FROM (
select baseset.PersonID, baseset.Name,
(select count(PersonID) from Persons where (b1=true  or b2=true) and     
PersonID = baseset.PersonID and workingdays<100) as column3, b1+b2 as column4
from Persons as baseset where (b1=true  or b2=true)
) as result    

哟可以在http://sqlfiddle.com/#!9/4321f/50

看到查询