日期:2014-05-18  浏览次数:20416 次

鱼大很生气,后果很严重
不小心把鱼老大的ID(paoluo)写成了puolao ,使得老大很伤心,后果是老大的空间一度打不开,使得我的收集工作受阻罪过!!
只收集了他的两贴
第一贴

查找树型结构的根结点. 

一个table t1 保存着多叉树型结构,比如 
P_cid c_cid 
-------------- 
A C 
B C 
C D 
C E 
F E 

另一个table t2 保存需要查找的节点,比如 
cid 
---- 



请问如何查出这个结果?谢啦 
cid top_cid 
--------------- 
D A 
D B 
E A 
E B 
E F 
SQL code
--創建測試環境 
Create   Table   T1 
(P_cid   Varchar(10), 
  c_cid   Varchar(10)) 
Insert   T1   Select   'A ',               'C ' 
Union   All   Select   'B ',               'C ' 
Union   All   Select   'C ',               'D ' 
Union   All   Select   'C ',               'E ' 
Union   All   Select   'F ',               'E ' 

Create   Table   T2 
(cid   Varchar(10)) 
Insert   T2   Select   'D ' 
Union   All   Select   'E ' 
GO 
--創建函數 
Create   Function   F_GetChildren() 
Returns   @Tree   Table(cid   Varchar(10),   top_cid   Varchar(10)) 
As 
Begin 
Insert   @Tree   Select   Distinct   A.c_cid,   A.P_cid   From   T1   A   Inner   Join   T2   B   On   A.c_cid   =   B.cid 
While   @@ROWCOUNT   >   0 
Insert   @Tree   Select   Distinct   B.cid,   A.P_cid   From   T1   A   Inner   Join   @Tree   B   On   A.c_cid   =   B.top_cid   Where   A.P_cid   Not   In   (Select   top_cid   From   @Tree) 
Delete   A   From   @Tree   A   Inner   Join   T1   B   On   A.top_cid   =   B.P_cid   Left   Join   T1   C   On   B.P_cid   =   C.c_cid   Where   C.P_cid   Is   Not   Null 
Return 
End 
GO 
--測試 
Select   *   From   dbo.F_GetChildren()   Order   By   cid,   top_cid 
GO 
--刪除測試環境 
Drop   Table   T1,   T2 
Drop   Function   F_GetChildren 
--結果 
/* 
cid top_cid 
D A 
D B 
E A 
E B 
E F 
*/



帖2
表1 
单号 项目1 
  1 A 
  1 B 
  2 A 
  2 B 
  3 C 
============== 
表2 
单号 项目2 
  1 A 
  1 C 
  2 C 
  4 A 
============== 
表3 
单号 项目1 项目2 
  1 A A 
  1 B null  
  1 null C 
  2 A null 
  2 B null 
  2 null C 
  3 C null 
  4 null A 


用sql表1和表2,创建出表3,可以利用视图、存储过程等各种方法(表3允许有空) 
请写出SQL语句,谢谢大家了!!
SQL code

Create   Table   表1 
(单号   Int, 
  项目1   Varchar(10)) 
Insert   表1   Select     1,             'A ' 
Union   All   Select     1,             'B ' 
Union   All   Select     2,             'A ' 
Union   All   Select     2,             'B ' 
Union   All   Select     3,             'C ' 

Create   Table   表2 
(单号   Int, 
  项目2   Varchar(10)) 
Insert   表2   Select     1,             'A ' 
Union   All   Select     1,             'C ' 
Union   All   Select     2,             'C ' 
Union   All   Select     4,             'A ' 
GO 
Select 
IsNull(A.单号,   B.单号)   As   单号, 
A.项目1, 
B.项目2 
From 
表1   A 
Full   Join 
表2   B 
On   A.单号   =   B.单号   And   A.项