2013-04-24 35 views
0

對不起我的問題標題,我找不到更好的名稱。根據select語句在數據庫中獲取值

這是我的表:

Project_ID ParentProject Projecttype 
---------------------------------------- 
20.003  20.001   P 
20.001  20    P 
20   NULL   V 
21.001  21    P 
21   NULL   V 

我要做出選擇我所有的項目與它的「upperparentproject」。我想用Projecttype = 'P' a ParentProjectProjecttype = 'V'搜索所有項目。所以這是我的結果:

Project_ID ParentProject 
-------------------------- 
20.003  20   
20.001  20     
21.001  21   

這是可能的SELECT陳述或有執行這個法子?

+0

可以使用遞歸CTE來實現這一目標。但是如果你的表有點大,遞歸CTE將表現得最差。 – Maximus 2013-04-24 08:59:37

+0

這確實是一個很大的表(11000行),你能給我一個使用我的示例表遞歸CTE的例子嗎? – Jovano 2013-04-24 09:02:52

+0

請參閱此鏈接遞歸CTE http://blog.sqlauthority.com/2008/07/28/sql-server-simple-example-of-recursive-cte/ - 我會在我得到時間後發佈答案。我現在有點忙:( – Maximus 2013-04-24 09:32:08

回答

0

試試這個:

select *,row_number() over (order by (select 0)) as rn  into tbl1 from table1 

Declare @mn int,@mx int 
Declare @mn1 int,@mx1 int 
Declare @prjid float,@prntid varchar(10) 
DECLARE @result TABLE(prjID float,prentID varchar(10)) 

select @mn=MIN(rn),@mx=MAX(rn) from tbl1 

WHILE(@mn<[email protected]) 
BEGIN 
select @prjid=Project_id,@prntid=ParentProject from tbl1 where [email protected] and ProjectType='P' 
select @mn1=MIN(rn),@mx1=MAX(rn) from tbl1 

WHILE(@mn1<[email protected]) 
BEGIN 
select @prntid=CASE WHEN ParentProject IS NOT NULL then ParentProject else @prntid end from tbl1 where [email protected] and rn = @mn1 
SET @[email protected]+1 
END 

INSERT INTO @result 
values(@prjid,@prntid) 

SET @[email protected]+1 
END 
select distinct * from @result 
+0

對不起,這個愚蠢的問題,但我從來沒有工作與over/into:什麼是你的代碼的第一林'table1'defen?當我嘗試查詢在我自己的數據庫中,這就是我卡住的地方 – Jovano 2013-04-24 10:29:01

+0

嘿,我只是將你的主表複製到另一個帶有序列號的表tbl1中ROW_NUMBER()用於生成序列號,如標識列 – AnandPhadke 2013-04-24 11:17:34

+0

在這裏,將table1替換爲實際的表 – AnandPhadke 2013-04-24 11:17:57

相關問題