SQL Server 显示列1的数据,其中包含列2中存在的上述值

8ehkhllq  于 2023-02-03  发布在  其他
关注(0)|答案(4)|浏览(148)

我的问题是如何根据column 2获取column 1的数据。
这是我存储的数据的一个小例子。

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')

我想得到正在学习所有三门科目(“数学”、“科学”、“语言1”)的学生的不同行。在这种情况下,结果将是罗汉和Raj。还请建议如何实现以下查询。
如果指定受试者:
1.正在学习{数学、科学、语言1}的学生列表
1.正在学习{数学,科学}的学生列表

kadbb459

kadbb4591#

SELECT S.STUDENT
FROM Student_subject S
GROUP BY S.Student
HAVING COUNT(DISTINCT S.Subject)=
  (SELECT COUNT (DISTINCT Subject) FROM Student_subject )
uqxowvwt

uqxowvwt2#

你可以数出一个学生的不同科目。

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
rxztt3cl

rxztt3cl3#

试试这个,也许它是有用的请考虑如果你想使你的查询动态多输入你可以使用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,'$'))
gcxthw6b

gcxthw6b4#

从学生_科目组中选择学生依据S.学生具有计数(不同的S.科目)=(从学生_科目中选择计数(不同的科目))

相关问题