2012-09-22 49 views
1

這裏是可用的數據庫。如何在sql中得到這個結果?

create table tab1 (
    masterid integer(2) primary key, 
    name varchar(22), 
    l2 integer(2) 
); 

insert into tab1 values(1,'g-1',50); 
insert into tab1 values(2,'g-1',50); 
insert into tab1 values(3,'g-1',50); 
insert into tab1 values(50,'grup1',-1); 
insert into tab1 values(5,'g-1',50); 
insert into tab1 values(60,'grup2',-1); 
insert into tab1 values(7,'g-2',60); 
insert into tab1 values(8,'g-2',60); 

也可在:http://sqlfiddle.com/#!2/b7fe9/1

結果應該是成組的。例如,行50,grup1,-1有50個將作爲主鍵,並且哪個行在該列中具有該masterID(這裏是50),應該被檢索。因此基本上所以我想要下面的輸出。

MasterId Name l2 
    50  grup1 -1 
    1  g-11 50 
    2  g-12 50 
    3  g-13 50 
    5  g-14 50 
    60  grup2 -1 
    7  g-21 60 
    8  g-22 60 

請注意,所有組在L2列中都有-1值。 我已經嘗試了很多東西,但我很困惑,這個輸出可以實現或不。我會感謝您的幫助。謝謝。

+0

「g-213」是什麼意思?第2組的第13個亞組或第21組的第3個亞組? –

+0

@ypercube先生,這是隨機數據...不是一個真正的。 –

回答

2

嘗試此查詢:

SELECT * 
FROM tab1 
-- Order records by "master id groups", first 
ORDER BY CASE WHEN l2 = -1 THEN Masterid ELSE l2 END, 
-- Within a "master id group", get the master first and then its children 
     CASE WHEN l2 = -1 THEN 0  ELSE 1 END 

或者,您可以修改多個表達式的ORDER BY條款,訂購「兄弟姐妹」

+0

感謝@lukas快樂:) –

0

更好地將數據歸爲一組表,並使用l2作爲外鍵。您可能無法獲得您要求的輸出,但您可以編寫代碼以使用組數據來完成數據所需。

create table groups (
    masterid integer(2) primary key, 
    name varchar(22), 
); 
create table tab1 (
    masterid integer(2) primary key, 
    name varchar(22), 
    l2 integer(2) 
); 

insert into groups values(50,'grup1'); 
insert into groups values(60,'grup2'); 
insert into tab1 values(1,'g-1',50); 
insert into tab1 values(2,'g-1',50); 
insert into tab1 values(3,'g-1',50); 
insert into tab1 values(5,'g-1',50); 
insert into tab1 values(7,'g-2',60); 
insert into tab1 values(8,'g-2',60);