2012-08-07 3 views
0

각 이벤트의 평균 "점수"와 각 이벤트의 수에 더하여 특정 이벤트 (건강 관리, 종교 및 스포츠)에 참석하는 회원 수를 제공하는 세 가지 선택 진술 문이 있습니다.선택 명령 조합하기

수는 이벤트마다 다를 수 있습니다.

개별적으로 각 쿼리가 작동하지만 하나의 쿼리로 결합하려고합니다.

어떻게하면됩니까?

(select sum(case when Healthcare ='1' then 1 else 0 end) as [Healthcare_never], 
sum(case when Healthcare ='2' then 1 else 0 end) as [Healthcare_not often], 
sum(case when Healthcare ='3' then 1 else 0 end) as [Healthcare_average], 
sum(case when Healthcare ='4' then 1 else 0 end) as [Healthcare_often], 
sum(case when Healthcare ='5' then 1 else 0 end) as [Healthcare_very often] 
,avg(Cast(Healthcare as float)) as Average 
,count(Healthcare) as N_Healthcare 
from Member 
where Healthcare > '0') 


(select 
    sum(case when Religious ='1' then 1 else 0 end) as [Religious_never], 
    sum(case when Religious ='2' then 1 else 0 end) as [Religious_not often], 
    sum(case when Religious ='3' then 1 else 0 end) as [Religious_average], 
    sum(case when Religious ='4' then 1 else 0 end) as [Religious_often], 
    sum(case when Religious ='5' then 1 else 0 end) as [Religious_very often], 
    Avg(cast(Religious as float)) as Average 
    ,count(Religious) as N_Religious 
    from Member 
    where Religious > '0') 


(select 
sum(case when Sport ='1' then 1 else 0 end) as [Sport_never], 
sum(case when Sport ='2' then 1 else 0 end) as [Sport_not often], 
sum(case when Sport ='3' then 1 else 0 end) as [Sport_average], 
sum(case when Sport ='4' then 1 else 0 end) as [Sport_often], 
sum(case when Sport ='5' then 1 else 0 end) as [Sport_very often], 
Avg(cast(Sport as float)) as Average 
,count(Sport) as N_Sport 
from Member 
where Sport > '0') 
+0

어떤 열이 결합 된 쿼리에서 좀하고 싶습니다 (55)입니까? – complex857

+0

진술을 결합하는 목표는 무엇입니까? 지금까지 뭐 해봤 어? – gcochard

+0

제 목표는 각 열의 값과 적절한 수를 갖는 것입니다. 내가 가지고있는 문제는 Where 문에 있습니다 ... 나는 아래에서 시도한 것을 게시 할 것입니다. – Stan

답변

3

모든 SELECT 문 사이에이

select 
sum(case when Healthcare ='1' then 1 else 0 end) as [Healthcare_never], 
sum(case when Healthcare ='2' then 1 else 0 end) as [Healthcare_not often], 
sum(case when Healthcare ='3' then 1 else 0 end) as [Healthcare_average], 
sum(case when Healthcare ='4' then 1 else 0 end) as [Healthcare_often], 
sum(case when Healthcare ='5' then 1 else 0 end) as [Healthcare_very often], 
avg(Cast((case when Healthcare > 0 Then Healthcare Else Null end) as float)) as Healthcare_Average, 
count(case when Healthcare > 0 Then Healthcare Else Null end) as N_Healthcare, 

sum(case when Religious ='1' then 1 else 0 end) as [Religious_never], 
sum(case when Religious ='2' then 1 else 0 end) as [Religious_not often], 
sum(case when Religious ='3' then 1 else 0 end) as [Religious_average], 
sum(case when Religious ='4' then 1 else 0 end) as [Religious_often], 
sum(case when Religious ='5' then 1 else 0 end) as [Religious_very often], 
Avg(cast((case when Religious > 0 Then Religious Else Null end) as float)) as Religious_Average, 
count(case when Religious > 0 Then Religious Else Null end) as N_Religious, 

sum(case when Sport ='1' then 1 else 0 end) as [Sport_never], 
sum(case when Sport ='2' then 1 else 0 end) as [Sport_not often], 
sum(case when Sport ='3' then 1 else 0 end) as [Sport_average], 
sum(case when Sport ='4' then 1 else 0 end) as [Sport_often], 
sum(case when Sport ='5' then 1 else 0 end) as [Sport_very often], 
Avg(cast((case when Sport > 0 Then Sport Else Null end) as float)) as Sport_Average, 
count(case when Sport > 0 Then Sport Else Null end) as N_Sport 

from Member 
2

그냥 넣어 UNION을 시도합니다. 그러나 어떤 테이블이 왔는지를 나타 내기 위해 다른 컬럼을 추가하고자 할 것입니다. 그리고 열 머리글은 동일해야합니다. 예를 들어 문은 각 이벤트에 대한 잘못된 수를 제공하는 경우

select 'Healthcare' as source 
, sum(case when Healthcare ='1' then 1 else 0 end) as [never], 
sum(case when Healthcare ='2' then 1 else 0 end) as [not often], 
sum(case when Healthcare ='3' then 1 else 0 end) as [average], 
sum(case when Healthcare ='4' then 1 else 0 end) as [often], 
sum(case when Healthcare ='5' then 1 else 0 end) as [very often] 
,avg(Cast(Healthcare as float)) as Average 
,count(Healthcare) as N_Healthcare 
from Member 
where Healthcare > '0' 
UNION ALL 

+0

열 머리글이 동일 할 필요는 없습니다. 열 이름은 첫 번째 하위 쿼리에서 가져오고 후속 하위 쿼리의 이름은 무시됩니다. –

1

문제는있다. 의료 수가 54해야 , 스포츠 (54) 및 기타 (13) 대신 모두의 수는

select 
sum(case when Healthcare ='1' then 1 else 0 end) as [Healthcare_never], 
sum(case when Healthcare ='2' then 1 else 0 end) as [Healthcare_not often], 
sum(case when Healthcare ='3' then 1 else 0 end) as [Healthcare_average], 
sum(case when Healthcare ='4' then 1 else 0 end) as [Healthcare_often], 
sum(case when Healthcare ='5' then 1 else 0 end) as [Healthcare_very often], 
avg(Cast(Healthcare as float)) as Average, 
count(Healthcare) as N_Healthcare, 

sum(case when Religious ='1' then 1 else 0 end) as [Religious_never], 
sum(case when Religious ='2' then 1 else 0 end) as [Religious_not often], 
sum(case when Religious ='3' then 1 else 0 end) as [Religious_average], 
sum(case when Religious ='4' then 1 else 0 end) as [Religious_often], 
sum(case when Religious ='5' then 1 else 0 end) as [Religious_very often], 
Avg(cast(Religious as float)) as Average, 
count(Religious) as N_Religious, 

sum(case when Sport ='1' then 1 else 0 end) as [Sport_never], 
sum(case when Sport ='2' then 1 else 0 end) as [Sport_not often], 
sum(case when Sport ='3' then 1 else 0 end) as [Sport_average], 
sum(case when Sport ='4' then 1 else 0 end) as [Sport_often], 
sum(case when Sport ='5' then 1 else 0 end) as [Sport_very often], 
Avg(cast(Sport as float)) as Average, 
count(Sport) as N_Sport 
from contacts_cstm 
where Sport > '0' or Religious > '0' or Healthcare >'0' 
+0

위와 같은 'OR'조건을 사용하면 올바른 데이터를 반환하지 않습니다. –

+0

맞습니다. 올바른 데이터를 반환하지 않습니다. 이전 예제가 그랬습니다. 고맙습니다! – Stan

관련 문제