我真的需要知道我是否可以在一个列中计算4个不同的值并将其存储在4个不同的变量中。这些变量将在稍后的程序中使用。
这是我的代码,但我不想使用select语句4次,但最好是1次。 有什么办法可以解决吗?
create or replace PROCEDURE FCountPrizes (dData IN DATE)
IS
szostki NUMBER;
piatki NUMBER;
czworki NUMBER;
trojki NUMBER;
BEGIN
SELECT COUNT(*) into szostki FROM Losy WHERE dData=DataLosowania AND FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) = 6;
SELECT COUNT(*) into piatki FROM Losy WHERE dData=DataLosowania AND FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) = 5;
SELECT COUNT(*) into czworki FROM Losy WHERE dData=DataLosowania AND FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) = 4;
SELECT COUNT(*) into trojki FROM Losy WHERE dData=DataLosowania AND FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) = 3;
END;
答案 0 :(得分:1)
SELECT sum(case FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) when 6 then 1 else 0 end),
sum(case FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) when 5 then 1 else 0 end),
sum(case FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) when 4 then 1 else 0 end),
sum(case FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) when 3 then 1 else 0 end)
into szostki, piatki, czworki, trojki
FROM Losy WHERE dData=DataLosowania;
根据评论,用nvl:
包装每个总和NVL(sum(case FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze)
when 3 then 1 else 0 end),
0)
如果你不想在你的局部变量中使用NULL。
另一种选择:
SELECT max(case func_res when 6 then n else null end),
max(case func_res when 5 then n else null end),
max(case func_res when 4 then n else null end),
max(case func_res when 3 then n else null end)
into szostki, piatki, czworki, trojki
FROM (
SELECT FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) as func_res, count(*) as n
FROM Losy WHERE dData=DataLosowania
GROUP BY FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze)
);
答案 1 :(得分:0)
create or replace PROCEDURE FCountPrizes (dData IN DATE)
IS
SELECT COUNT(DECODE(CountGuessed(dData, LiczbyMniejsze, LiczbyWieksze),6,1)) ,
COUNT(DECODE(CountGuessed(dData, LiczbyMniejsze, LiczbyWieksze),5,1)) ,
COUNT(DECODE(CountGuessed(dData, LiczbyMniejsze, LiczbyWieksze),4,1)) ,
COUNT(DECODE(CountGuessed(dData, LiczbyMniejsze, LiczbyWieksze),3,1))
INTO
szostki,
piatki,
czworki,
trojki
FROM Losy
WHERE dData=DataLosowania
END FCountPrizes;
/
答案 2 :(得分:0)
这是您的数据。
SELECT FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) value, COUNT(*) records
FROM Losy
WHERE dData=DataLosowania
AND FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) in (3,4,5,6)
GROUP BY FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze);
您可以运行一次并对结果执行某些操作。你有选择。
答案 3 :(得分:0)
查询的PIVOT
版本如下所示:
select * from (
select FCountGuessed(dData, LiczbyMniejsze, LiczbyWieksze) f
from Losy
where dData=DataLosowania
)
pivot (
count(*) for (f) in (
6 as szostki,
5 as piatki,
4 as czworki,
3 as trojki
)
)