我想在查询不返回任何记录时显示0。我试过用nvl,但它不起作用。请指示。
create table temp (id number , cat varchar2(10));
insert into temp values (100,'EUR');
insert into temp values (101,'MAR');
insert into temp values (102,'AST');
insert into temp values (103,'GHK');
insert into temp values (104,'MST');
insert into temp values (105,'LAL');
select TOTAL_CNT , COUNT(*)
FROM
(
SELECT 'T' TOTAL_CNT, nvl(count(DISTINCT id),0) cnt FROM TEMP GROUP BY CAT
union all
SELECT 'U' UNIQUE_CNT ,nvl(count(DISTINCT id),0) cnt FROM TEMP GROUP BY CAT HAVING COUNT(DISTINCT ID)>1
) GROUP BY TOTAL_CNT;
字符串
预期产出:我没有得到“U”值。
TOTAL_CNT COUNT(*)
T 6
U 0
型
2条答案
按热度按时间lyr7nygr1#
如果你想把值作为列(而不是行),那么你只需要从表中
SELECT
一次并聚合两次(使用条件聚合来找到U
值):字符串
哪些输出:
| U| U |
| --| ------------ |
| 0个| 0 |
如果你确实想把它作为行,那么你可以使用
UNPIVOT
(同样,它不使用UNION
,只从表中使用SELECT
一次):型
哪些输出:
| CNT| CNT |
| --| ------------ |
| 六个| 6 |
| 0个| 0 |
fiddle
q5iwbnjs2#
这是一个选项:
字符串