使用临时表的左联接不起作用

时间:2019-09-22 15:34:08

标签: sql sql-server left-join row-number

我试图在表“ x”上执行“左联接”,但我需要“ row_number”,所以我正在使用带有“ with”命令的临时表,但查询无法正常工作,并且我收到出现以下错误:

  

SQL错误[156] [S1000]:关键字“ WITH”附近的语法不正确。关键字“ WITH”附近的语法不正确。关键字“ WITH”附近的语法不正确。关键字“ with”附近的语法不正确。如果此语句是公用表表达式,xmlnamespaces子句或更改跟踪上下文子句,则前一条语句必须以分号终止。 ')'附近的语法不正确。

有人知道如何解决

SELECT telefoneEnriquecido1. FROM VPOTPRP P
    LEFT JOIN (
        WITH tel AS (
            SELECT
                ID_PROSP,
                DT_INC,
                ID_NUM_TEL AS novoTelefone,
                DT_ATC AS dataAtualizacao,
                ROW_NUMBER() OVER (PARTITION BY ID_PROSP ORDER BY DT_ATC DESC) AS rowNumber
            FROM
            VPOTTEL
        )
        SELECT
        FROM tel
        WHERE
        rowNumber = 1
    ) telefoneEnriquecido1 on p.ID_PROSP = telefoneEnriquecido1.ID_PROSP

1 个答案:

答案 0 :(得分:2)

奇怪的语法。我总是发现嵌入在查询中的CTE令人困惑,尽管某些数据库支持它们。我找不到CTE向查询添加任何内容;只需使用子查询:

SELECT . . .   -- whatever columns you want
FROM VPOTPRP P LEFT JOIN (
     (SELECT ID_PROSP, DT_INC, ID_NUM_TEL AS novoTelefone,
             DT_ATC AS dataAtualizacao,
             ROW_NUMBER() OVER (PARTITION BY ID_PROSP ORDER BY DT_ATC DESC) AS rowNumber
      FROM VPOTTEL
     ) PL
     ON P.ID_PROSP = PL.ID_PROSP AND rowNumber = 1