1

我有以下查询:

    WITH Orders(Id)
AS (
SELECT DISTINCT anfrageid FROM MPHotlineAnfrageAnhang
)
SELECT Id,
(
SELECT CONVERT(VARCHAR(255),anfragetext) + ' | '
FROM MPHotlineAnfrageAnhang
WHERE anfrageid = Id
ORDER BY anfrageid, erstelltam
FOR XML PATH('')
) AS Descriptions
FROM Orders

它连接按 id 分组的不同行的 varchar 值。但现在我想将它作为子查询包含在内,它给出了一些我无法解决的错误。使用简化示例:

select descriptions from 
(
    WITH Orders(Id)
    AS (
    SELECT DISTINCT anfrageid FROM MPHotlineAnfrageAnhang
    )
    SELECT Id,
    (
    SELECT CONVERT(VARCHAR(255),anfragetext) + ' | '
    FROM MPHotlineAnfrageAnhang
    WHERE anfrageid = Id
    ORDER BY anfrageid, erstelltam
    FOR XML PATH('')
    ) AS Descriptions
    FROM Orders
) as tx where id=100012

错误(西班牙语的近似翻译):

-Incorrect sintaxis near 'WITH'.
-Incorrect sintaxis near 'WITH'. If the instruction is a common table expression or a xmlnamespaces clause, the previous instruction must end with semicolon.
-Incorrect sintaxis near ')'.

我做错了什么?

4

2 回答 2

4

将您的查询链接为 CTE,如下所示:

WITH Orders(Id) AS (
    SELECT DISTINCT anfrageid
    FROM MPHotlineAnfrageAnhang
),
OrderDescs AS (
    SELECT Id, (
        SELECT CONVERT(VARCHAR(255),anfragetext) + ' | '
        FROM MPHotlineAnfrageAnhang
        WHERE anfrageid = Id
        ORDER BY anfrageid, erstelltam
        FOR XML PATH('')
        ) AS Description
    FROM Orders
)
SELECT Description
FROM OrderDescs
WHERE Id = 100012 

在实际查询之前,您可以拥有任意数量的 CTE,每个 CTE 都引用前一个。

于 2010-03-31T09:18:28.937 回答
0

此外,您需要在 WITH 语句之前有一个分号。

;with Orders(id)

或者用分号终止前面的语句。

于 2010-03-31T09:21:58.660 回答