sql - Teradata 中的 QUALIFY ROW_NUMBER

标签 sql oracle teradata

下面是oracle SQL,我想将其更改为Teradata格式。

SELECT branch_code,
    branch_no,
    c_no,
    cd_type
FROM (
    SELECT branch_code,
        branch_no,
        c_no,
        cd_type,
        * * RANK() OVER (
            PARTITION BY c_no ORDER BY cd_type
            ) RANK * *
    FROM (
        SELECT branch_code,
            branch_no,
            c_no,
            MIN(cd_type) cd_type
        FROM EMPLOYEE
        WHERE S_CODE = 'C'
            AND (branch_no) NOT IN (
                SELECT branch_code
                FROM DEPARTMENT
                WHERE branch_code = 'ABC'
                )
        )
    )
WHERE RANK = 1

我已将 QUALIFY 用于 RANK,如下所示。

SELECT branch_code,
    branch_no,
    c_no,
    cd_type
FROM (
    SELECT branch_code,
        branch_no,
        c_no,
        cd_type,
        * * QUALIFY ROW_NUMBER() OVER (
            PARTITION BY c_no ORDER BY cd_type
            ) * * RANK
    FROM (
        SELECT branch_code,
            branch_no,
            c_no,
            MIN(cd_type) cd_type
        FROM EMPLOYEE
        WHERE S_CODE = 'C'
            AND (branch_no) NOT IN (
                SELECT branch_code
                FROM DEPARTMENT
                WHERE branch_code = 'ABC'
                )
        )
    )
WHERE RANK = 1

但是出现错误“预期介于 , 和 QUALIFY 之间。

我们可以将 QUALIFY 放在 select 语句中吗?

最佳答案

您可能简化了现有查询,因为这不是有效的 Oracle SQL(内联 View 中没有 GROUP BY)。另外,您可以在 NOT IN 中将 branch_nobranch_code 进行比较。

否则埃德·吉布斯的答案可以进一步简化为:

SELECT branch_code,
    branch_no,
    c_no,
    MIN(cd_type) cd_type
FROM EMPLOYEE
WHERE S_CODE = 'C'
    AND (branch_no) NOT IN (
        SELECT branch_no
        FROM DEPARTMENT
        WHERE branch_code = 'ABC'
        )
GROUP BY branch_code,
    branch_no,
    c_no
QUALIFY
   RANK()
   OVER (PARTITION BY c_no 
         ORDER BY MIN(cd_type) = 1

如果 branch_no 定义为 NULLable,您还应该将 NOT IN 重写为 NOT EXISTS

关于sql - Teradata 中的 QUALIFY ROW_NUMBER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20612597/

相关文章:

sql - 将第一张表的数据排序后从另一张表插入到表中

sql - 甲骨文 PL/SQL : How to pretty print a large number

c# - 不支持 NTLM 身份验证 token

java - 在java中,当传递查询以从teradata获取字段的平均值时,小数点会丢失

database - 在 Debian 或 CentOS 中安装 Teradata

MySQL错误1111(HY000): Invalid use of group function

MySQL 上的 PHP PDO 查询未按预期返回

java - 是否有任何验证 SQL 语法的 Java 库?

oracle - 在 Windows XP (SP3) 上安装 Oracle Database 10g 时出错

oracle, utf-8, NVARCHAR2,还有很多困惑