TSQL-如何使用另一列搜索包含字符串的列?

TSQL-如何使用另一列搜索包含字符串的列?,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我正试图根据最近的年级列隔离学校ID。这显示了学生被划分为哪些学校。我不知道如何根据列结果搜索字符串。隔离学生最好的方法是什么 多谢各位 数据: 所需结果: SQL Fiddle代码:(我很难在没有错误的情况下构建模式。) 首先,您的数据结构非常糟糕。您不应该将列表存储在单个列中。你应该有一个单独的表格,每个学校的每个年级都有一行。或者,为学校的成绩设置“最大”和“最小”列——假设学校有连续的成绩 但是,您可以使用这样的: select t.* from #t1 t where ',' +

我正试图根据最近的年级列隔离学校ID。这显示了学生被划分为哪些学校。我不知道如何根据列结果搜索字符串。隔离学生最好的方法是什么

多谢各位

数据:

所需结果:

SQL Fiddle代码:(我很难在没有错误的情况下构建模式。)


首先,您的数据结构非常糟糕。您不应该将列表存储在单个列中。你应该有一个单独的表格,每个学校的每个年级都有一行。或者,为学校的成绩设置“最大”和“最小”列——假设学校有连续的成绩

但是,您可以使用
这样的

select t.*
from #t1 t
where ',' + t.schoolgrades + ',' like '%,' + mostrecentgrade + ',%';

首先,您的数据结构非常糟糕。您不应该将列表存储在单个列中。你应该有一个单独的表格,每个学校的每个年级都有一行。或者,为学校的成绩设置“最大”和“最小”列——假设学校有连续的成绩

但是,您可以使用
这样的

select t.*
from #t1 t
where ',' + t.schoolgrades + ',' like '%,' + mostrecentgrade + ',%';

将逗号分隔的数据存储在字段中是非常糟糕的数据库设计,这会使类似的查询变得非常复杂。将这些逗号分隔的值规范化为一对多表,这种设计的问题才刚刚开始……不要将多个值作为逗号分隔的值字符串存储在单个字段中。别这样。这是对规范化的根本性突破,规范化是关系数据库设计的基本部分。相反,要有一个类似于
SchoolID,SchoolGrade
的单独表格,然后将每个年级放在不同的行中。(学校118为8行,学校338为4行,等等)假定存储CSV是一种反模式,您将需要一个非常笨拙的查询子句,例如
WHERE'、'+SchoolGrades+'、'LIKE'、'+RecentGrade+'、%'
。请注意,从您的图像文件中,看起来您使用逗号加空格作为分隔符,而不仅仅是逗号。谢谢您的评论,我对设计没有异议。这不是我的设计,只是想利用我现有的东西。再次感谢!将逗号分隔的数据存储在字段中是非常糟糕的数据库设计,这会使类似的查询变得非常复杂。将这些逗号分隔的值规范化为一对多表,这种设计的问题才刚刚开始……不要将多个值作为逗号分隔的值字符串存储在单个字段中。别这样。这是对规范化的根本性突破,规范化是关系数据库设计的基本部分。相反,要有一个类似于
SchoolID,SchoolGrade
的单独表格,然后将每个年级放在不同的行中。(学校118为8行,学校338为4行,等等)假定存储CSV是一种反模式,您将需要一个非常笨拙的查询子句,例如
WHERE'、'+SchoolGrades+'、'LIKE'、'+RecentGrade+'、%'
。请注意,从您的图像文件中,看起来您使用逗号加空格作为分隔符,而不仅仅是逗号。谢谢您的评论,我对设计没有异议。这不是我的设计,只是想利用我现有的东西。再次感谢!它的隐含惩罚是不能使用索引。比较前,可能值得用空字符串替换SchoolGrades/MostRecentGrade中的任何空格。比较前,可能值得用空字符串替换SchoolGrades/MostRecentGrade中的任何空格