Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何从两列中获取不同的值并使其成为一列_Sql Server_Tsql - Fatal编程技术网

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
将删除重复条目(如果有)。