我的问题是如何根据column2获得column1的数据。
这是我存储的一个小数据示例。
create table Student_subject
(
Student varchar(20),
Subject varchar(20)
)
insert into Student_subject
values ('Rohan', 'Maths'),
('Rohan', 'Science'),
('Rohan', 'Language1'),
('RAJ' , 'Maths'),
('RAJ' , 'Science'),
('RAJ' , 'Language1'),
('SAM' , 'Maths'),
('SAM' , 'Language1')
我想获得学习所有三门科目("数学"、"科学"、"语言")的学生的不同行。在这种情况下,结果将是Rohan和Raj。也请告知如何实现以下查询。
如果指定了主题:
- 正在学习{数学、科学、语言1}的学生名单
- 正在学习{数学,科学}的学生名单
SELECT S.STUDENT
FROM Student_subject S
GROUP BY S.Student
HAVING COUNT(DISTINCT S.Subject)=
(SELECT COUNT (DISTINCT Subject) FROM Student_subject )
你可以为一个学生计算不同的科目。
Select Student
From Student_subject
Group by Student
Having Count(Distinct [Subject])=3
或者您可以使用string_agg函数来获取目标主题列表。
Select Student
From Student_subject
Group by Student
Having string_agg([Subject],',') Within Group (Order by [Subject])='Language1,Maths,Science'
Order by Student
试试这个,也许会有帮助请考虑,如果你想让你的查询与多个输入动态,你可以使用json参数
下面是一个json输入 的示例
DECLARE @test NVARCHAR(MAX)='["Language1","Maths"]'
SELECT Student,COUNT(1)
FROM Student_subject
WHERE Subject IN
(
SELECT Value
FROM OPENJSON(@test,'$')
)
GROUP BY Student
HAVING COUNT(1)>=(SELECT COUNT(Value)
FROM OPENJSON(@test,'$'))
SELECT student从student_subjects .学生分组有计数(不同的主语)=(SELECT COUNT (DISTINCT Subject) FROM Student_subject)