0

我在用 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

感谢大家的帮助!

4

2 回答 2

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;
于 2013-04-12T12:35:25.020 回答
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

我假设在现实生活中,这些值作为变量或参数传递,而不是像您的示例中那样被硬编码。

于 2013-04-12T14:11:27.597 回答