Sql server 如何从两列中获取不同的值并使其成为一列
我想问一下男性程序员学习的语言是什么。从下表Sql server 如何从两列中获取不同的值并使其成为一列,sql-server,tsql,Sql Server,Tsql,我想问一下男性程序员学习的语言是什么。从下表 ID PNAME GENDER PROF1 PROF2 1 ANAND M PASCAL BASIC 2 ALTAF M CLIPPER COBOL 3 JULIANA F COBOL DBASE 4 KAMALA F C DBASE 5 MARY F CPP ORACLE 6 NELSON
ID PNAME GENDER PROF1 PROF2
1 ANAND M PASCAL BASIC
2 ALTAF M CLIPPER COBOL
3 JULIANA F COBOL DBASE
4 KAMALA F C DBASE
5 MARY F CPP ORACLE
6 NELSON M COBOL DBASE
7 PATTRICK M PASCAL CLIPPER
8 QADIR M ASSEMBL C
9 RAMESH M PASCAL DBASE
10 REBECCA F BASIC COBOL
11 REMITHA F C ASSEMB
12 REVATHI F PASCAL BASIC
13 VIJAYA F FOXFRP C
当使用简单查询仅获取男性编程人员时,我可以使用该查询从[PRAC].[dbo].[PROGRAMMER]中选择[ID]、[PNAME]、[GENDER]、[PROF1]、[PROF2],其中GENDER='M'
ID PNAME GENDER PROF1 PROF2
1 ANAND M PASCAL BASIC
2 ALTAF M CLIPPER COBOL
6 NELSON M COBOL DBASE
7 PATTRICK M PASCAL CLIPPER
8 QADIR M ASSEMBL C
9 RAMESH M PASCAL DBASE
甚至我们也可以使用union命令从两个列中获得不同的值,例如
SELECT DISTINCT PROF1 FROM PROGRAMMER WHERE gender = 'M'
union
SELECT DISTINCT PROF2 FROM PROGRAMMER WHERE gender = 'M'
PROF
---------
ASSEMBL
BASIC
C
CLIPPER
COBOL
DBASE
PASCAL
但是我想要一些我做不到的事情
ID PNAME GENDER proficiency
1 ANAND M PASCAL
1 ANAND M BASIC
2 ALTAF M CLIPPER
2 ALTAF M COBOL
6 NELSON M COBOL
6 NELSON M DBASE
7 PATTRICK M PASCAL
7 PATTRICK M CLIPPER
8 QADIR M ASSEMBL
8 QADIR M C
9 RAMESH M PASCAL
9 RAMESH M DBASE
请提前提供帮助和感谢向联合查询添加require列
SELECT [PROF1],
[ID],
[PNAME],
[GENDER]
FROM PROGRAMMER
WHERE gender = 'M'
UNION
SELECT [PROF2],
[ID],
[PNAME],
[GENDER]
FROM PROGRAMMER
WHERE gender = 'M'
只需将ID、PNAME和性别添加到您的查询?正如@JamesZ所述,将这些列添加到union语句中您真正的问题是您的表不是3NF:您应该有一个子表来存储学生与课程的关系。您可能希望使用
union ALL
,而不是union
——这取决于您是否希望对结果进行重复数据消除UNION
将删除重复条目(如果有)。