Sql 从查询中获取结果
我想写一个查询,这样我就可以像Sql 从查询中获取结果,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我想写一个查询,这样我就可以像 CREATE TABLE TEMP25 ( STATUS VARCHAR2(200 BYTE) ); Insert into TEMP25 (STATUS) Values ('PENDING'); Insert into TEMP25 (STATUS) Values ('ERROR'); Insert into TEMP25 (STATUS) Values ('ERROR'); Insert into TEMP25
CREATE TABLE TEMP25
(
STATUS VARCHAR2(200 BYTE)
);
Insert into TEMP25
(STATUS)
Values
('PENDING');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('NOT_REQUIRED');
Insert into TEMP25
(STATUS)
Values
('NOT_REQUIRED');
Insert into TEMP25
(STATUS)
Values
('PENDING');
Insert into TEMP25
(STATUS)
Values
('PENDING');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('NOT_REQUIRED');
Insert into TEMP25
(STATUS)
Values
('ERROR');
Insert into TEMP25
(STATUS)
Values
('INVALID');
Insert into TEMP25
(STATUS)
Values
('INVALID');
Insert into TEMP25
(STATUS)
Values
('PENDING');
我希望记录按顺序排列,在一个查询中,我已尝试使用with table子句它可以工作…是否有其他解决方案…并且不希望出现无效记录您可以轻松地使用case when语句并获得此结果…也要查看它
TOTAL_RECORDS TOTAL_PENDING TOTAL_NOT_REQUIRED TOTAL_PENDING
-----------------------------------------------------------------
14 4 3 5
-----------------------------------------------------------------
你可以很容易地使用case-when语句并得到这个结果…也可以查看它
TOTAL_RECORDS TOTAL_PENDING TOTAL_NOT_REQUIRED TOTAL_PENDING
-----------------------------------------------------------------
14 4 3 5
-----------------------------------------------------------------
如果愿意,您可以使用SUM/CASE或SUM/DECODE
Select COUNT(*) TOTAL_RECORDS ,
SUM(case when status = 'ERROR' then 1 else 0 END) TOTAL_ERROR
SUM(case when status = 'NOT_REQUIRED' then 1 else 0 END) TOTAL_NOT_REQUIRED,
SUM(case when status = 'PENDING' then 1 else 0 END) TOTAL_PENDING,
FROM temp25
您也可以使用pivot,但获取计数*有点难看
Select
COUNT(*) TOTAL_RECORDS ,
SUM(case when status = 'PENDING' then 1 else 0 END) TOTAL_PENDING,
SUM(case when status = 'NOT_REQUIRED' then 1 else 0 END) TOTAL_NOT_REQUIRED,
SUM(case when status = 'ERROR' then 1 else 0 END) TOTAL_ERROR
FROM temp25
如果愿意,您可以使用SUM/CASE或SUM/DECODE
Select COUNT(*) TOTAL_RECORDS ,
SUM(case when status = 'ERROR' then 1 else 0 END) TOTAL_ERROR
SUM(case when status = 'NOT_REQUIRED' then 1 else 0 END) TOTAL_NOT_REQUIRED,
SUM(case when status = 'PENDING' then 1 else 0 END) TOTAL_PENDING,
FROM temp25
您也可以使用pivot,但获取计数*有点难看
Select
COUNT(*) TOTAL_RECORDS ,
SUM(case when status = 'PENDING' then 1 else 0 END) TOTAL_PENDING,
SUM(case when status = 'NOT_REQUIRED' then 1 else 0 END) TOTAL_NOT_REQUIRED,
SUM(case when status = 'ERROR' then 1 else 0 END) TOTAL_ERROR
FROM temp25
在甲骨文中,你可以
WITH
COUNTS AS(
select *
from (
select status
from TEMP25 t
)
pivot
(
count(status)
for status in ('PENDING' AS TOTAL_PENDING,
'NOT_REQUIRED' AS TOTAL_NOT_REQUIRED,
'ERROR' AS TOTAL_ERROR)
))
SELECT COUNT(*) total_records,
total_pending,
total_not_required,
total_error
FROM temp25,
counts
GROUP BY total_pending,
total_not_required,
total_error
所有数据库都有一个空表,您可以从这种东西中使用。在Oracle中,您可以
WITH
COUNTS AS(
select *
from (
select status
from TEMP25 t
)
pivot
(
count(status)
for status in ('PENDING' AS TOTAL_PENDING,
'NOT_REQUIRED' AS TOTAL_NOT_REQUIRED,
'ERROR' AS TOTAL_ERROR)
))
SELECT COUNT(*) total_records,
total_pending,
total_not_required,
total_error
FROM temp25,
counts
GROUP BY total_pending,
total_not_required,
total_error
所有数据库都有一个空表,您可以从这类数据中使用。前面的答案具有对源表进行单次扫描的优势。前面的答案具有对源表进行单次扫描的优势。