2017-03-12 16 views
0

男性プログラマが調査した言語は何ですか? follwingテーブルから2つの列から異なる値を得て、それを1つの列にする方法

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 

男性のみプログラマを出すために、単純なクエリを使用したとき、私は
SELECT [ID], [PNAME],[GENDER],[PROF1],[PROF2] FROM [PRAC].[dbo].[PROGRAMMER] where 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 

も、私たちは労働組合のコマンドなど

の両方colunmsから異なる値を得ることができることを使用することができます
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 

助け、事前のおかげで

+2

ID、PNAME、GENDERをクエリに追加するだけですか? –

+1

@JamesZが述べているように、これらの列をユニオンステートメントに追加してください – scsimon

+0

あなたの本当の問題は、テーブルが3NFでないことです:学生 - コース関係を保存する子テーブルを用意する必要があります – Bohemian

答えて

1

の追加は、ユニオンクエリに列を必要としてください。

SELECT  [PROF1], 
       [ID], 
       [PNAME], 
       [GENDER] 
FROM PROGRAMMER 
WHERE gender = 'M' 
UNION 
SELECT   [PROF2], 
       [ID], 
       [PNAME], 
       [GENDER] 
FROM PROGRAMMER 
WHERE gender = 'M' 
+3

'UNION' - 結果を重複排除するかどうかによって決まります。この答えのようにUNION自体は重複するエントリがあれば削除します。 – Tim

関連する問題