T-SQL嵌套子查询
我不是一个SQL专家,而且在CTE方面也只是半熟练的,我如何在主查询中使用以下子查询的结果集来编写此语句,因为我们的SQL Server是2000T-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
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
语句,不能是整个批处理。