我在PL / SQL中编写查询时遇到问题。 我确切地知道如何在SQL Server T-SQL中执行此操作,我对Oracle不太满意。
它必须是一串SQL,而不是一个过程。
以下是我需要的查询类型。这不是实际的查询,但看到这个翻译应该给我我需要的东西。
您可以看到第一个查询是第二个查询的子集,如果它占基础数据的5%以上,则会返回结果。
考虑到这一点,如果有更好的方式来写它,我也会对此感兴趣!
DECLARE @x int
SELECT @x = COUNT(*) * 20
FROM table1
WHERE table1.a=1
AND table1.b=2
AND table1.c=3
DECLARE @y int
SELECT @y = COUNT(*)
FROM table1
WHERE table1.a=1
AND table1.b=2
If @x > @y
SELECT *
FROM table1
WHERE table1.a=1
AND table1.b=2
AND table1.c=3
感谢您的帮助!
答案 0 :(得分:1)
这可以提供帮助。
DECLARE
rate NUMBER(2,1);
output SYS_REFCURSOR;
BEGIN
SELECT SUM(CASE WHEN c=3 THEN 1 ELSE 0 END ) / COUNT(*)
INTO rate
FROM table1
WHERE table1.a=1
AND table1.b=2;
IF (rate > 0.5) THEN
OPEN output FOR
SELECT *
FROM table1
WHERE table1.a=1
AND table1.b=2
AND table1.c=3
END IF;
END;
答案 1 :(得分:1)
使用子查询(您熟悉的常见表表达式)来获取两个值:
with x_data as (SELECT COUNT(*) * 20 x
FROM table1
WHERE table1.a=1
AND table1.b=2
AND table1.c=3 )
, y_data as (SELECT COUNT(*) y
FROM table1
WHERE table1.a=1
AND table1.b=2
SELECT table1.*
FROM table1
, y_data
, x_data
WHERE x > y
and table1.a=1
AND table1.b=2
AND table1.c=3
我假设在现实生活中,值是作为变量或参数传递的,而不是像在您的示例中那样进行硬编码。