8

SQL テーブル名のカテゴリがあります。構造は次のとおりです。

slno      Category            Uppercategory

1           Mouse              Computer

2          Computer            Electronics

3          Electronics           END

4           END                    -

ここでは、マウスが上位カテゴリのコンピューターにあり、次にコンピューターが上位カテゴリの電子機器にあり、電子機器が上位カテゴリ ENd を持つため、電子機器が最後の上位カテゴリになります。上位カテゴリが END である最後のカテゴリ (電子機器) を取得する必要があります。私はいくつかのコードを試しましたが、結果が得られません.hereが私のコードです。

USE [Database1]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[kt_category]
       @Dcat AS NVARCHAR(250)
AS
DECLARE @tmp TABLE (cater NVARCHAR(255))

BEGIN 

INSERT INTO @tmp 
SELECT UPPERCATEGORY FROM CATEGORY where CATEGORY=@Dcat

while( SELECT UPPERCATEGORY FROM CATEGORY )= 'END'
RETURN
END
4

1 に答える 1

3

これを実現するために再帰クエリを使用することもできます。

;WITH R
     AS (SELECT *,
                1 AS Level
         FROM   CATEGORY
         WHERE  Category = @Dcat
         UNION ALL
         SELECT C.*,
                R.Level + 1
         FROM   CATEGORY C
                JOIN R
                  ON R.Uppercategory = C.Category)
SELECT TOP 1 *
FROM   R
ORDER  BY Level DESC 

使用することもできます

SELECT TOP 1 *
FROM   R
WHERE Uppercategory  = 'End'
ORDER  BY Level

最後のクエリとして。これは、質問のコードに近いセマンティクスを持っています。

于 2013-05-28T06:51:59.527 に答える