Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.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
T-SQL嵌套子查询_Sql_Sql Server_Sql Server 2000_Subquery_Nested - Fatal编程技术网

T-SQL嵌套子查询

T-SQL嵌套子查询,sql,sql-server,sql-server-2000,subquery,nested,Sql,Sql Server,Sql Server 2000,Subquery,Nested,我不是一个SQL专家,而且在CTE方面也只是半熟练的,我如何在主查询中使用以下子查询的结果集来编写此语句,因为我们的SQL Server是2000 declare @subcategoryConcatenate varchar(3999) set @subcategoryConcatenate = '' select @subcategoryConcatenate = @subcategoryConcatenate + pumpCategoryName + ',' FROM (SELECT

我不是一个SQL专家,而且在CTE方面也只是半熟练的,我如何在主查询中使用以下子查询的结果集来编写此语句,因为我们的SQL Server是2000

declare @subcategoryConcatenate varchar(3999)
set @subcategoryConcatenate = ''

select @subcategoryConcatenate = @subcategoryConcatenate + pumpCategoryName + ',' FROM
(SELECT
            SCD.PUMPCATEGORYNAME,
            SCD.ENGINECATEGORYNAME,
            SCD.DETAILEDDESCRIPTION
FROM PRTTICKHDR PHDR
INNER JOIN BIDHDR BHDR ON PHDR.DELIV_TICKET_NUMBER = BHDR.DTICKET
INNER JOIN PRTTICKITEM PITM ON PHDR.CONNECTION_ID = PITM.CONNECTION_ID AND PHDR.DELIV_TICKET_NUMBER = PITM.DELIV_TICKET_NUMBER
LEFT JOIN SUBCATEGORYDESCRIPTION SCD ON PITM.ITEM = SCD.PUMPCATEGORY
WHERE SCD.pumpCategoryName IS NOT NULL)
subcategoryDescription

select @subcategoryConcatenate


SQL Server 2000不支持CTE。您可以选择在子查询中创建一个视图(如果子查询经常使用),或者创建一个内联视图:

select
  .. stuff..
from
  table1 t1
  join table2 t2 on ...stuff...
  join (
    select
       ...
    from
       ...
    where
       ...
  ) inline on ... stuff ...
where
  ....

您需要一个用户定义的函数。
从外观上看,每个PRTTICKITEM可以有多个PUMPCATEGORY?
(问题需要更好地解释预期结果。)

在这种情况下,您的UDF将如下所示:

CREATE FUNCTION  GetPumpCategoriesByItem (@ItemID int)

    RETURNS varchar (8000)
AS
BEGIN
    DECLARE
        @CategoryList       varchar (8000)
    SET @CategoryList       = NULL  -- MUST be null to avoid leading comma.

    SELECT
        @CategoryList       =  COALESCE (@CategoryList + ', ', '') + SCD.PUMPCATEGORYNAME
    FROM
        SUBCATEGORYDESCRIPTION SCD
    WHERE
        SCD.PUMPCATEGORY    = @ItemID
    ORDER BY
        SCD.PUMPCATEGORYNAME

    RETURN @CategoryList
END
SELECT
    PITM.ITEM,
    dbo.GetPumpCategoriesByItem (PITM.ITEM),
    ... ...
FROM 
    ... ...
INNER JOIN PRTTICKITEM PITM ON ... ...
... ...
.
要使用它,应该是这样的:

CREATE FUNCTION  GetPumpCategoriesByItem (@ItemID int)

    RETURNS varchar (8000)
AS
BEGIN
    DECLARE
        @CategoryList       varchar (8000)
    SET @CategoryList       = NULL  -- MUST be null to avoid leading comma.

    SELECT
        @CategoryList       =  COALESCE (@CategoryList + ', ', '') + SCD.PUMPCATEGORYNAME
    FROM
        SUBCATEGORYDESCRIPTION SCD
    WHERE
        SCD.PUMPCATEGORY    = @ItemID
    ORDER BY
        SCD.PUMPCATEGORYNAME

    RETURN @CategoryList
END
SELECT
    PITM.ITEM,
    dbo.GetPumpCategoriesByItem (PITM.ITEM),
    ... ...
FROM 
    ... ...
INNER JOIN PRTTICKITEM PITM ON ... ...
... ...

挣扎着编写代码并获取我希望检索的内容!如果可能的话,我可以简单地嵌套在顶部查询中吗?不,您最好将其作为UDF编写。子查询只能有一个
select
语句,不能是整个批处理。