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