Sql 我有一张桌子;学生;,现在我想查询与第二个表相同的结果。一组必须有2名学生。

Sql 我有一张桌子;学生;,现在我想查询与第二个表相同的结果。一组必须有2名学生。,sql,Sql,我有一个表Student,现在我想查询与第二个表相同的结果。一组必须有2名学生 Student ID Name Gender Group 1 A M A1 2 B F A1 3 C M A2 4 D M A2 5 E F

我有一个表
Student
,现在我想查询与第二个表相同的结果。一组必须有2名学生

Student ID    Name    Gender    Group
1             A       M         A1
2             B       F         A1
3             C       M         A2
4             D       M         A2
5             E       F         A3
6             F       F         A3     
比如:

select t1.name, t1.gender, t2.name, t2.gender, t1.group 
from student t1, student t2 
where t1.group = t2.group and t1.id < t2.id
选择t1.name、t1.gender、t2.name、t2.gender、t1.group
来自学生t1,学生t2
其中t1.group=t2.group和t1.id

students
是您表格的名称,
group\u s
是group列

以下是完整的示例

CREATE TABLE testing
(id char(10),
name char(10),
gender char(1),
grp char(10))

insert into testing values ('1','A','M','A1')
insert into testing values ('2','B','F','A1')
insert into testing values ('3','C','M','A2')
insert into testing values ('4','D','M','A2')
insert into testing values ('5','E','F','A3')
insert into testing values ('6','F','F','A3')


    select name1, gender1, name2, gender2, a.grp  from
    (
    SELECT name1 = CASE CONVERT(int,id)%2 WHEN 1 THEN name ELSE null END,
            gender1 = CASE CONVERT(int,id)%2 WHEN 1 THEN gender ELSE null END,
            grp FROM testing where CONVERT(int,id)%2 =1
    ) a 
    left join 
    (
    SELECT name2 = CASE CONVERT(int,id)%2 WHEN 0 THEN name ELSE null END,
            gender2 = CASE CONVERT(int,id)%2 WHEN 0 THEN gender ELSE null END,
            grp FROM testing where CONVERT(int,id)%2 =0
    ) b on a.grp=b.grp

你确定每组只有2名学生吗?你不应该依赖
id
。如果插入顺序如下(id grp),则查询将不起作用:1-
A1
、2-
A2
、3-
A1
、4-
A2
、5-
A3
、6-
A3
SELECT s1.name AS Name1, s1.gender AS Gender1, 
       s2.name AS Name2, s2.gender AS Gender2, 
       groups.group_s
FROM (
  SELECT MIN(id) AS st_first, MAX(id) AS st_second, group_s
  FROM students
  GROUP BY group_s
) AS groups
LEFT JOIN students s1 ON groups.st_first=s1.id
LEFT JOIN students s2 ON groups.st_second=s2.id
CREATE TABLE testing
(id char(10),
name char(10),
gender char(1),
grp char(10))

insert into testing values ('1','A','M','A1')
insert into testing values ('2','B','F','A1')
insert into testing values ('3','C','M','A2')
insert into testing values ('4','D','M','A2')
insert into testing values ('5','E','F','A3')
insert into testing values ('6','F','F','A3')


    select name1, gender1, name2, gender2, a.grp  from
    (
    SELECT name1 = CASE CONVERT(int,id)%2 WHEN 1 THEN name ELSE null END,
            gender1 = CASE CONVERT(int,id)%2 WHEN 1 THEN gender ELSE null END,
            grp FROM testing where CONVERT(int,id)%2 =1
    ) a 
    left join 
    (
    SELECT name2 = CASE CONVERT(int,id)%2 WHEN 0 THEN name ELSE null END,
            gender2 = CASE CONVERT(int,id)%2 WHEN 0 THEN gender ELSE null END,
            grp FROM testing where CONVERT(int,id)%2 =0
    ) b on a.grp=b.grp