2013-05-28 31 views
8

我有一個SQL表名類別。這裏有結構。如何使用存儲過程使用while選擇一個值

slno  Category   Uppercategory 

1   Mouse    Computer 

2   Computer   Electronics 

3   Electronics   END 

4   END     - 

在這裏,在uppercategory電腦鼠標,然後在uppercategory Electronics.and的電子計算機是最後uppercategory因爲電子具有uppercategory ENd.I需要得到最後一類(電子),其uppercatergory是END。 我試了一些代碼,但沒有得到result.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 [email protected] 

while(SELECT UPPERCATEGORY FROM CATEGORY)= 'END' 
RETURN 
END 
+1

爲什麼'HOVED'而不是'END'? – sarwar026

+0

對不起.......... – Arun

回答

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 

爲最終的查詢。這與您的問題中的代碼有更緊密的語義關係。

+0

會嘗試......... – Arun

+0

我在我的表嘗試此查詢,但我得到的答案一樣 類別Uppercategory END 我需要這個步驟之前, 。當上級類別爲END時,需要添加類別 – Arun

+0

@ user2318361 - 具體而言,您需要從示例數據中返回哪些內容?電腦? –

相關問題