Sql 分组依据,仅派生一个数据集和多个数据集

Sql 分组依据,仅派生一个数据集和多个数据集,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张如下的桌子 StudentID Name Subject 1 AAA Computers 2 BBB Computers 2 BBB Electronics 3 CCC Electronics 我想将这些数据加载到两个表中,如下所示 仅限一个Subject表 StudentID Name Subject 1 AAA Computers 3

我有一张如下的桌子

StudentID    Name  Subject
1            AAA   Computers
2            BBB   Computers
2            BBB   Electronics
3            CCC   Electronics
我想将这些数据加载到两个表中,如下所示 仅限一个Subject表

StudentID    Name  Subject
1            AAA   Computers
3            CCC   Electronics
不止一个主题表

StudentID    Name  Subject
2            BBB   Computers
2            BBB   Electronics
我的sql如下所示,不确定如何从下面的查询中提取数据

 SELECT *,row_number() over(partition by Name order by Subject) FROM 
 STUDENTS
第一个

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)
但我真的只会用它来返回结果。。。不需要划分一个需要不断更新的表。

对于第一个表

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)
但我真的只会用它来返回结果。。。无需分割需要不断更新的表格。

您可以使用:

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
学生姓名科目cnt 1台AAA电脑1 3 CCC电子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
学生姓名科目cnt 1台AAA电脑1 3 CCC电子1
但在一张桌子上就好多了。为什么要将数据拆分?我的问题并不完全是这样,它是类似的,一旦我进入了不止一个主题类型,那么我必须应用一些清理规则,使其仅为一行,并将其合并到第一个数据集。但在一个表中会更好。为什么要将数据拆分?我的问题并不完全是这样,它是类似的,一旦我进入了不止一个主题类型,那么我必须应用一些清理规则,使其仅为一行,并将其合并到第一个数据集。