这是可用的数据库。
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个作为主键,哪个行在l2列中具有该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 :(得分: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
子句,以命令“兄弟姐妹”
答案 1 :(得分: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);