显示列n1的数据,它由列2中提到的值组成



我的问题是如何根据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. 正在学习{数学、科学、语言1}的学生名单
  2. 正在学习{数学,科学}的学生名单
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)

最新更新