我有以下Oracle SQL查询:
SELECT ST.hrs_source_id,
TT.hrs_source_name,
Count(*)
FROM ps_hrs_app_profile P,
ps_hrs_rcmnt_sts S,
ps_hrs_al_log_srce ST,
ps_hrs_source TT
WHERE ST.hrs_source_id = TT.hrs_source_id
AND P.hrs_person_id = S.hrs_person_id
AND P.hrs_al_log_id = ST.hrs_al_log_id
AND S.status_code = '010'
AND S.status_dt BETWEEN '01-JAN-09' AND '31-MAR-16'
GROUP BY ST.hrs_source_id,
TT.hrs_source_name
ORDER BY TT.hrs_source_name ASC;
Run Code Online (Sandbox Code Playgroud)
上面的查询产生的结果以3列:HRS_SOURCE_ID,HRS_SOURCE_NAME,COUNT.但我想将两个COUNTs加入一个查询中.第二个查询与上面相同,但只STATUS_CODE应该等于'060',而在第一个查询中它等于'010'.如何COUNT在一个Query中将两个s连接在一起,总共将有4列?请帮忙解决.
您可以使用案例表达式来获取不同的计数:
SELECT ST.HRS_SOURCE_ID,
TT.HRS_SOURCE_NAME,
COUNT(case when S.STATUS_CODE = '060' then 1 end) as cnt60,
count(case when S.STATUS_CODE = '010' then 1 end) as cnt10
FROM PS_HRS_APP_PROFILE P, PS_HRS_RCMNT_STS S, PS_HRS_AL_LOG_SRCE ST, PS_HRS_SOURCE TT
WHERE ST.HRS_SOURCE_ID = TT.HRS_SOURCE_ID
AND P.HRS_PERSON_ID = S.HRS_PERSON_ID
AND P.HRS_AL_LOG_ID = ST.HRS_AL_LOG_ID
AND (S.STATUS_CODE = '010' or S.STATUS_CODE = '060')
AND S.STATUS_DT BETWEEN '01-JAN-09' AND '31-MAR-16'
GROUP BY ST.HRS_SOURCE_ID, TT.HRS_SOURCE_NAME
ORDER BY TT.HRS_SOURCE_NAME ASC
Run Code Online (Sandbox Code Playgroud)
注意where子句中的OR.
您可以更好地理解与计数相结合的总和:
sum(case when S.STATUS_CODE = '060' then 1 else 0 end) cnt60
Run Code Online (Sandbox Code Playgroud)
为了解释查询中的情况,没有else.如果status与060不同,则case返回的值为null.Null不计算在内count.
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |