表:STATUS_TABLE获取记录计数在单独的列
id | Status |
=================
1 true
2 false
3 false
4 true
我怎样才能获得真正的和单独的列假使用Oracle两者的数量? 我必须只显示那些状态为真的记录。所以我把条件放在哪里。 但我必须显示两者的数量。 像
MARKED_RECORD UNMARKED_RECORD
2 2
表:STATUS_TABLE获取记录计数在单独的列
id | Status |
=================
1 true
2 false
3 false
4 true
我怎样才能获得真正的和单独的列假使用Oracle两者的数量? 我必须只显示那些状态为真的记录。所以我把条件放在哪里。 但我必须显示两者的数量。 像
MARKED_RECORD UNMARKED_RECORD
2 2
如何像
SELECT SUM(CASE WHEN Status = 'true' THEN 1 ELSE 0 END) MARKED_RECORD,
SUM(CASE WHEN Status = 'false' THEN 1 ELSE 0 END) UNMARKED_RECORD
FROM STATUS_TABLE
WITH src1 AS
(
SELECT 1 id, 'TRUE' status FROM dual UNION ALL
SELECT 2 id, 'TRUE' status FROM dual UNION ALL
SELECT 3 id, 'FLASE' status FROM dual UNION ALL
SELECT 4 id, 'TRUE' status FROM dual UNION ALL
SELECT 5 id, 'FLASE' status FROM dual UNION ALL
SELECT 6 id, 'TRUE' status FROM dual UNION ALL
SELECT 7 id, 'FLASE' status FROM dual
)
, src AS
(
SELECT id
, status
, SUM(DECODE(status, 'TRUE', 1, NULL)) OVER (ORDER BY id) AS is_true
, SUM(DECODE(status, 'FLASE', 1, NULL)) OVER (ORDER BY id) AS is_false
FROM src1
)
SELECT s1.id
, s1.status
, s2.m_is_true
, s2.m_is_false
FROM src s1
CROSS JOIN
(
SELECT MAX(is_true) AS m_is_true
, MAX(is_false) AS m_is_false
FROM src
) s2
WHERE s1.status = 'TRUE'
;
结果:
ID STATUS M_IS_TRUE M_IS_FALSE
1 TRUE 4 3
2 TRUE 4 3
4 TRUE 4 3
6 TRUE 4 3
像这样
select decode(status,'true','Marked','false','Unmarked')status,
count(status) Count
from sample_table
code layoutgroup by status
我必须只显示那些状态为true的记录。所以我把条件放在哪里。但我必须显示两者的数量。 – Milan
@Milan,这个答案完全给你你所要求的。你为什么要添加一个where条件? –