Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql T-sql公共表达式查询作为子查询_Tsql_Subquery_Common Table Expression - Fatal编程技术网

Tsql T-sql公共表达式查询作为子查询

Tsql T-sql公共表达式查询作为子查询,tsql,subquery,common-table-expression,Tsql,Subquery,Common Table Expression,我有以下疑问: 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('') )

我有以下疑问:

    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 ')'.

我做错了什么?

将您的查询链接为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都引用上一个CTE。

将查询链接为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都引用上一个CTE。

此外,WITH语句之前需要有分号

;with Orders(id)

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

另外,with语句之前需要有分号

;with Orders(id)

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

如果您已经看到了测试用例示例,那么没有前面的语句,并且尝试您的解决方案会给出:在“;”旁边有不正确的语法和不正确的语法旁边啊,抱歉我错过了与第二个代码示例!Matt Hamilton方法应该做你想做的事情,没有任何语法错误,你不能在子查询中使用With。如果你看过测试用例示例,没有前面的语句,尝试你的解决方案会给出:在“;”旁边有不正确的语法和不正确的语法旁边啊,抱歉我错过了与第二个代码示例!Matt Hamiltons方法应该做你想做的事情,没有任何语法错误,你不能在子查询中使用With。看不到如何应用它:S你能重构我的示例查询,以便我在上下文中理解它吗?@ase69s看我有多接近了!:有效:!一个问题是,为了避免混淆,我发布的查询是一个简化的查询,但在实际情况中,查询非常长,格式如下:选择t1.field1、t2.field1、field2、field3、field4,子查询由一些代码链接,子查询2由一些代码链接,子查询3由表t1中的一些代码链接,表2 t2,其中。。。正如您所看到的,te子查询是自动包含的…更易于管理。那么,我如何重新格式化您的版本,以便像其他版本一样包含它呢?@ase69s,子查询是自动包含的……更易于管理,但这些都是巨大的性能消耗,因为它们对返回的每个结果集行都运行一次。如果你能使用联接或派生表重写它们,你会更好。是的,这是一个已知的问题,但现在…知道如何做也很有趣。看不到如何应用它:你能重构我的示例查询以便我能在上下文中理解它吗?@ase69s看我有多接近了!:有效:!一个问题是,为了避免混淆,我发布的查询是一个简化的查询,但在实际情况中,查询非常长,格式如下:选择t1.field1、t2.field1、field2、field3、field4,子查询由一些代码链接,子查询2由一些代码链接,子查询3由表t1中的一些代码链接,表2 t2,其中。。。正如您所看到的,te子查询是自动包含的…更易于管理。那么,我如何重新格式化您的版本,以便像其他版本一样包含它呢?@ase69s,子查询是自动包含的……更易于管理,但这些都是巨大的性能消耗,因为它们对返回的每个结果集行都运行一次。如果你能用连接或派生表重写它们,你会更好。是的,这是一个已知的问题,但现在…知道如何做也会很有趣。