2016-07-28 11 views
0

Ich versuche, die Struktur von Eltern/Kind über SQL-Abfrage zu bekommen.Parent/Child-Hierarchie - SQL Server (Baum)

Ich habe diesen Code:

state_code, Beschreibung

A000 
A010 
B000 
B010 
B01A 
B01B 
B020 
B02A 

Ich möchte eine Struktur wie parent_id, Element_ID und ab

, so dass:

A 
A000 
-01 (from A) 
--A010 
B 
B000 
-01 
--B010 
--B01A 
-02 
-- 

versuchte ich es mit diesem Code, aber leider funktioniert es nicht.

select distinct 
    SUBSTRING(REPLACE(state_cd,'0',''),1, LEN(REPLACE(state_cd, '0', '')) -1) AS parent_id, REPLACE(state_cd,'0','') state_id, 
    state_cd, 
    desc_1 
from 
    CATEGORYSTRUCTURE 
inner join 
    CATEGORYITEMS on CATEGORYSTRUCTURE.struct_id = CATEGORYITEMS.struct_id 
left join 
    STATECODES on key_1 = state_cd 
where 
    state_type = '22' 

UNION ALL 

select distinct 
    SUBSTRING(REPLACE(state_cd,'0',''),1, LEN(REPLACE(state_cd, '0', '')) -1) AS parent_id, 
    REPLACE(state_cd,'0','') state_id, 
    stat_cd, 
    desc_1 
from 
    CATEGORYITEMS 
inner join 
    STATECODES on key_1 = state_cd 
where 
    state_type = '22' 

Mein Ergebnis:

parent_id stat_id stat_cd desc_1 
    O O000 11 
    P P000 Pa) 
    Q Q000 prod 
    R R000 Zus 
    S S000 Ver 
    T T000 Pack 
A A1 A010 Get 
A A1 A100 Kakt 
A A3 A030 Kol 
A A7 A070 Milk 
A A8 A080 Spt 
A1 A11 A110 Lo 
A1 A1A A01A Hcht 

Was ich will, ist alles, was unter den jeweiligen Zeichen

A A7 A070 Milk 
    A A8 A080 Spt 
    A A11 A110 Lo 
    A1 A1A A01A Hcht 
+1

Riecht wie eine schlechte Datenbank des Ign zu mir. Sie sollten eine Refactoring Ihrer Tabelle in Erwägung ziehen und eine Spalte mit nullbaren Eltern-IDs hinzufügen. –

+0

Bitte geben Sie weitere Beispieldaten an. Das ist nicht klar. – NEER

+0

Ihr Ergebnis wie map'parent_id', 'element_id' und' desc'? –

Antwort

0

Ich kann nicht verstehen, was genau wollen Sie, Aber ich denke, diese Abfrage können Sie helfen :

SELECT state_cd 
    , SUBSTRING(state_cd,1,1) As Parent0 
    , CASE WHEN state_cd Like '__[^0]_' THEN SUBSTRING(state_cd,2,2) ELSE '' END As Parent1 
    , CASE WHEN state_cd Like '___[^0]' THEN SUBSTRING(state_cd,4,1) ELSE '' END As Parent2 
FROM yourTable 
+0

Bitte überprüfen Sie mein Ergebnis und die Beschreibung. Ich habe es gerade aktualisiert. – naturalCoder

+0

Ich empfehle Ihnen, ** [SQL Fiddle] (http://sqlfiddle.com/#!6) ** zu verwenden, um Ihre Beispieldaten zu speichern;). –

Verwandte Themen