2015-06-10 55 views
2

我正在使用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

試試這個

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 
+0

這是一個不同的選擇。我沒有這樣想,它工作得很好。謝謝.. @SimarjeetSingh Panghlia – Rose

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

相關問題