我不确定如何让SQL做我想弄清楚的事情。我有一个学生,根据他们的年级,将在三所学校之一(schoolid)。
我需要根据年级水平仅返回学生目前所在学校的StudentID和SchoolID。我该如何以这种方式搜索?
期望的结果(学生在12年级,因此学校ID是500):
谢谢。
答案 0 :(得分:2)
where GradesOfferedInSchool like '%' + cast(StudentCurrentGrade as varchar(max)) + '%'
但这是一个糟糕的数据设计 不应该在一列中有多个值
这仍然只是一个黑客,因为这会发现' 12b'
如果这是一个视图,那么查找标准化数据
更好但仍然是黑客
where GradesOfferedInSchool like '% ' + cast(StudentCurrentGrade as varchar(max)) + ', %'
or GradesOfferedInSchool like cast(StudentCurrentGrade as varchar(max)) + ', %'
or GradesOfferedInSchool like '%, ' + cast(StudentCurrentGrade as varchar(max))
or GradesOfferedInSchool = cast(StudentCurrentGrade as varchar(max))
答案 1 :(得分:1)
这适用于我使用Microsoft SQL Server。需要CAST
,否则由于字段的数据类型不同而引发错误。
SELECT
StudentID,
SchoolID
FROM dbo.StudentFeederPatterns
WHERE GradesOfferedInSchool LIKE '%' + CAST(StudentCurrentGrade AS VARCHAR) + '%'
答案 2 :(得分:0)
很奇怪为什么你在[StudentCurrentGrade]上做INT,其中'PK'和'KK'是它的选项 无论如何:
SELECT [StudentID]
, [SchoolID]
, [GradesOfferedInSchool]
, [StudentCurrentGrade]
FROM [dbo].[StudentFeederPatterns]
WHERE CHARINDEX( CAST([StudentCurrentGrade] AS VARCHAR)
, [GradesOfferedInSchool]) > 0