2013-03-11 74 views
1

我在SQL Server下表中UnitConvertOne 2008組一組鏈價值的

DECLARE @UnitConvert table 
(
    ID int identity(1,1), 
    ConvertUnitOne nvarchar(50), 
    ConvertUnitTwo nvarchar(50) 
) 


INSERT INTO @UnitConvert 
SELECT 100,500 
UNION ALL SELECT 200,100 
UNION ALL SELECT 500,300 
UNION ALL SELECT 2000,1000 
UNION ALL SELECT 3000,9000 
UNION ALL SELECT 2000,700 
UNION ALL SELECT 820,3000 

SELECT * FROM @UnitConvert 

這裏值相當於UnitConvertTwo 所以它擁有的價值鏈接

所以我想鏈顯示像

Group   unit 

1    100 

       200 

       300 

       500 

2    700 

       1000 

       2000 

3    820 

       3000 

       9000 

組值將基於組的數量被自動增量的結果可以被創建 單位價值可以是從小排序,以較大的值

+1

我無法理解。 UnitConvertOne如何等於UnitConvertTwo?輸出的邏輯是什麼? – 2013-03-11 06:45:06

+0

我們在這裏插入一些相當於我們插入的某個單位的尺寸單位 100 = 500,200 = 100,500 = 300..so 100,200,300,500組成一組 – SQL006 2013-03-11 08:29:47

+0

編輯了預期的輸出 – SQL006 2013-03-11 09:55:21

回答

0

感謝尤金Elutin從sqlservercentral.com

DECLARE @UnitConvert table 
(
    ID int identity(1,1), 
    ConvertUnitOne nvarchar(50), 
    ConvertUnitTwo nvarchar(50) 
) 

INSERT INTO @UnitConvert 
SELECT 100,500 
UNION ALL SELECT 200,100 
UNION ALL SELECT 500,300 
UNION ALL SELECT 2000,1000 
UNION ALL SELECT 3000,9000 
UNION ALL SELECT 2000,700 
UNION ALL SELECT 820,3000 

;WITH cteUP AS 
(
SELECT ConvertUnitTwo AS childUP, ConvertUnitOne AS unitUP, 0 AS Lvl 
FROM @UnitConvert 
UNION ALL 
SELECT cte.childUP, u.ConvertUnitOne AS unitUP, Lvl = Lvl + 1 
FROM @UnitConvert u 
INNER JOIN cteUP cte ON cte.unitUP = u.ConvertUnitTwo 
) 
--select * from cteUP 
SELECT c.ConvertUnit 
     ,DENSE_RANK() OVER (ORDER BY ISNULL(cm.unitUP, c.ConvertUnit)) AS GrpNO 
FROM (SELECT ConvertUnitOne AS ConvertUnit FROM @UnitConvert 
     UNION 
     SELECT ConvertUnitTwo AS ConvertUnit FROM @UnitConvert) c 
OUTER APPLY (SELECT TOP 1 unitUP FROM cteUP m WHERE 
      m.childUP = c.ConvertUnit ORDER BY Lvl DESC) cm