T-SQL根据条件合并记录

时间:2010-12-10 21:37:09

标签: tsql merge records

在SQL server 2008中,我的表格得分低于表格。我想为同一个学生一起显示Score1和Score2。名称和电子邮件组合唯一标识学生(姓名或电子邮件也可能丢失,如Jack和Maya@moon.com)。预期输出显示为T_Combined。

得分

Name    Email   Score1  Score2
John    'John@pluto.com'    75  
Peter   'Peter@pluto.com'   34  
Nina    'Nina@pluto.com'    45  
Joseph  'Joseph@pluto.com'  76  
Tom 'Tom@pluto.com' 43  
Sam 'Sam@pluto.com' 76  
Nancy   'Nancy@pluto.com'   12  
Tina    'Tina@pluto.com'    56  
John    'John@mars.com' 98  
Peter   'Peter@mars.com'    12  
Nina    'Nina@mars.com' 45  
Joseph  'Joseph@mars.com'   87  
Tom 'Tom@mars.com'  67  
Sam 'Sam@mars.com'  99  
Nancy   'Nancy@mars.com'    33  
Tina    'Tina@mars.com' 23  
John    'John@pluto.com'        86
Peter   'Peter@pluto.com'       56
Nina    'Nina@pluto.com'        98
Joseph  'Joseph@pluto.com'      78
Tom 'Tom@pluto.com'     12
Sam 'Sam@pluto.com'     45
Nancy   'Nancy@pluto.com'       76
Tina    'Tina@pluto.com'        78
John    'John@mars.com'     98
Peter   'Peter@mars.com'        45
Nina    'Nina@mars.com'     76
Joseph  'Joseph@mars.com'       12
Tom 'Tom@mars.com'      84
Sam 'Sam@mars.com'      27
Nancy   'Nancy@mars.com'        54
Tina    'Tina@mars.com'     50
Jack        10  
'Maya@moon.com'     20

T_Combined

Name    Email   Score1  Score2
John    'John@pluto.com'        86
Peter   'Peter@pluto.com'       56
Nina    'Nina@pluto.com'        98
Joseph  'Joseph@pluto.com'  78  
Tom 'Tom@pluto.com' 43  12
Sam 'Sam@pluto.com' 76  45
Nancy   'Nancy@pluto.com'   12  
Tina    'Tina@pluto.com'    56  
John    'John@mars.com' 98  
Peter   'Peter@mars.com'    12  
Nina    'Nina@mars.com' 45  76
Joseph  'Joseph@mars.com'   87  12
Tom 'Tom@mars.com'  67  84
Sam 'Sam@mars.com'  99  27
Nancy   'Nancy@mars.com'    33  54
Tina    'Tina@mars.com' 23  50
Jack        10  
'Maya@moon.com'     20

非常感谢

创建表分数(名称varchar(20),电子邮件varchar(20),Score1 int,Score2 int)

插入分数(姓名,电子邮件,分数1)值('John','John @ pluto.com',75) 插入分数(姓名,电子邮件,分数1)值('彼得','彼得@ pluto.com',34) 插入分数(姓名,电子邮件,分数1)值('Nina','Nina @ pluto.com',45) 插入分数(姓名,电子邮件,分数1)值('Joseph','Joseph @ pluto.com',76) 插入分数(姓名,电子邮件,分数1)值('Tom','Tom @ pluto.com',43) 插入分数(姓名,电子邮件,分数1)值('Sam','Sam @ pluto.com',76) 插入分数(姓名,电子邮件,分数1)值('Nancy','Nancy @ pluto.com',12) 插入分数(姓名,电子邮件,分数1)值('Tina','Tina @ pluto.com',56) 插入分数(姓名,电子邮件,分数1)值('John','John @ mars.com',98) 插入分数(姓名,电子邮件,分数1)值('Peter','Peter @ mars.com',12) 插入分数(姓名,电子邮件,分数1)值('Nina','Nina @ mars.com',45) 插入分数(姓名,电子邮件,分数1)值('Joseph','Joseph @ mars.com',87) 插入分数(姓名,电子邮件,分数1)值('Tom','Tom @ mars.com',67) 插入分数(姓名,电子邮件,分数1)值('Sam','Sam @ mars.com',99) 插入分数(姓名,电子邮件,分数1)值('Nancy','Nancy @ mars.com',33) 插入分数(姓名,电子邮件,分数1)值('Tina','Tina @ mars.com',23)

插入分数(姓名,电子邮件,分数2)值('John','John @ pluto.com',86) 插入分数(姓名,电子邮件,分数2)值('Peter','Peter @ pluto.com',56) 插入分数(姓名,电子邮件,分数2)值('Nina','Nina @ pluto.com',98) 插入分数(姓名,电子邮件,分数2)值('Joseph','Joseph @ pluto.com',78) 插入分数(姓名,电子邮件,分数2)值('Tom','Tom @ pluto.com',12) 插入分数(姓名,电子邮件,分数2)值('Sam','Sam @ pluto.com',45) 插入分数(姓名,电子邮件,分数2)值('Nancy','Nancy @ pluto.com',76) 插入分数(姓名,电子邮件,分数2)值('Tina','Tina @ pluto.com',78) 插入分数(姓名,电子邮件,分数2)值('John','John @ mars.com',98) 插入分数(姓名,电子邮件,分数2)值('Peter','Peter @ mars.com',45) 插入分数(姓名,电子邮件,分数2)值('Nina','Nina @ mars.com',76) 插入分数(姓名,电子邮件,分数2)值('Joseph','Joseph @ mars.com',12) 插入分数(姓名,电子邮件,分数2)值('Tom','Tom @ mars.com',84) 插入分数(姓名,电子邮件,分数2)值('Sam','Sam @ mars.com',27) 插入分数(姓名,电子邮件,分数2)值('Nancy','Nancy @ mars.com',54) 插入分数(姓名,电子邮件,分数2)值('Tina','Tina @ mars.com',50)

插入分数(名称,分数1)值('杰克',10) 插入分数(电子邮件,分数2)值('Maya @ moon.com',20)

1 个答案:

答案 0 :(得分:2)

select Name, Email, isnull(SUM(Score1),'') as Score1, isnull(SUM(Score2),'') as Score2
    from Score 
    group by Name, Email