2016-09-07 13 views
-1

構造、勘定科目範囲、およびaccountvalueUSDの3つのテーブルがあります。キーを持つテーブルのアカウントの範囲でこの階層の作成方法

Level 1...Level 2...Level 3...Level 4....account...valueusd 
111  112 113  114  100  1000 
111  112  113  114  101  2000 

テーブル構造へのリンク:テーブル構造で親と子IDの階層から、私はこのような階層を作成するテーブルと

テーブルacountrangeリンクをfinancialitem口座番号と口座番号:accountfromとaccountto番号:

どうすればいいですか?

CREATE TABLE [dbo].[structure](
    [Financialitem] [nvarchar](3) NULL, 
    [ID] [int] NULL, 
    [ParentID] [int] NULL, 
    [ChildID] [int] NULL, 
    [NextID] [int] NULL, 
    [Level] [int] NULL 
) ON [PRIMARY] 
INSERT INTO [dbo].[structure] 
VALUES 
(111,1,null,2,null,1), 
(112,2,1,3,null,2), 
(113,3,2,4,null,3), 
(114,4,3,null,null,4), 
(221,5,2,6,null,3), 
(222,6,5,null,7,4), 
(223,7,5,null,null,4) 

    CREATE TABLE [dbo].[accountrange](
    [Financialitem] [nvarchar](3) NULL, 
    [Accountfrom] [int] NULL, 
    [Accountto] [int] NULL 
) ON [PRIMARY] 
INSERT INTO [dbo].[accountrange] 
VALUES 
(114,100,105), 
(222,200,205), 
(223,300,305) 


    CREATE TABLE [dbo].[accountvalue](
    [accountnumber] [int] NULL, 
    [valuesUSD] [int] NULL, 
) ON [PRIMARY] 
INSERT INTO [dbo].[accountvalue] 
VALUES 
(100,1000), 
(101,2000), 
(301,1500), 
(201,1400) 
+0

使用しているシステムの言語や表記法を指定できますか、ご質問ください。 –

+0

ありがとうブライアン、私はTのSQLを使用しています。 – phalondon

答えて

0

指定したデータを使用して、指定した出力が表示されます。それは4つのレベルにハードコードされているので、よりダイナミックなものが必要な場合は、さらなる考えが必要になります。

また、ブランチが表示されなかった理由は、親IDと子IDの両方の列で一致する必要があるためです。

select L1.Financialitem as [Level 1] 
    , L2.Financialitem as [Level 2] 
    , L3.Financialitem as [Level 3] 
    , ar.Financialitem as [Level 4] 
    , av.accountnumber, av.valuesUSD 
from accountrange ar 
inner join accountvalue av on av.accountnumber between ar.Accountfrom and ar.Accountto 
inner join structure as L4 on L4.Financialitem = ar.Financialitem 
inner join structure as L3 on L3.ID = L4.ParentID and L3.ChildID = L4.ID 
inner join structure as L2 on L2.ID = L3.ParentID and L2.ChildID = L3.ID 
inner join structure as L1 on L1.ID = L2.ParentID and L1.ChildID = L2.ID 
関連する問題