2017-07-24 42 views
0

有一个表,如下组通过,获得只有一个数据集和多个数据集

StudentID Name Subject 
1   AAA Computers 
2   BBB Computers 
2   BBB Electronics 
3   CCC Electronics 

我要加载这个数据,到两个表如下 OnlyOneSubject表

StudentID Name Subject 
1   AAA Computers 
3   CCC Electronics 

MoreThanOneSubject表

StudentID Name Subject 
2   BBB Computers 
2   BBB Electronics 

我的SQL如下,不知道如何提取数据这下面的查询。

SELECT *,row_number() over(partition by Name order by Subject) FROM 
STUDENTS 
+2

但它是这么多,在一个表更好。你为什么要分开数据? –

+0

我的问题不完全是这样,它是相似的,一旦我进入这个多个科目种类,然后我必须应用一些清理规则,并使其只有一行,并将其结合到第一个数据集。 –

回答

1

你可以使用:

WITH STUDENTS(StudentID,Name,Subject)AS(
    SELECT 1,'AAA','Computers' UNION ALL 
    SELECT 2,'BBB','Computers' UNION ALL 
    SELECT 2,'BBB','Electronics' UNION ALL 
    SELECT 3,'CCC','Electronics' 
) 
select * from (
    SELECT *,count(0) over(partition by Name) as cnt FROM STUDENTS 
) as t where cnt=1 ---or cnt>1 for MoreThanOneSubject 
 
StudentID Name Subject cnt 
1 AAA Computers 1 
3 CCC Electronics 1 
2

对于第一个...

select * 
from table 
where StudentID in (select StudentID from table group by StudentID having count(*) = 1) 

,第二个......

select * 
from table 
where StudentID in (select StudentID from table group by StudentID having count(*) > 1) 

但我真的只能用这个返回结果...不需要划分一张你必须不断更新的表格。

相关问题