2016-07-20 3 views
0

最新の学年の欄に基づいて学校のIDを分離しようとしています。これは、学生がゾーン化されている学校を示しています。列の結果に基づいて文字列を検索する方法がわかりません。学校教育者を隔離する最良の方法は何ですか?TSQL - 別の列を使用して文字列を含む列を検索するにはどうすればよいですか?

ありがとうございます。

データ:

enter image description here

望ましい結果:

enter image description here

SQLフィドルコード:(。私はトラブルエラーなしで構築するためのスキーマを取得してい)

CREATE TABLE #T1 (
StudentID varchar(10), 
AddressID varchar(10), 
SchoolID varchar(10), 
SchoolGrades varchar(100), 
MostRecentGrade varchar(10), 
) 

INSERT INTO #T1 
VALUES 
('7777777','297','118','PK,KK,01,02,03,04,05,MG','10'), 
('7777777','297','338','06,07,08,MG','10'), 
('7777777','297','528','09,10,11,12,MG','10') 

SELECT * 
FROM #T1 
+3

分野でそのようにカンマで区切られたデータを保存するには、大幅にこのようなクエリが複雑になります非常に悪いデータベース設計です。 – Siyual

+2

コンマで区切られた値を1対多のテーブルに正規化すると、そのデザインの問題はちょうど始まりです... –

+0

結果をテキストとして整理できますか、一部のドメインでイメージがブロックされる可能性があります – TheGameiswar

答えて

3

まず、データ構造が非常に貧弱です。リストを1つの列に格納すべきではありません。各学校の学年ごとに1つの行を持つ別のテーブルが必要です。または、学校の成績に最大と最小の欄があります。学校には連続した成績があると仮定します。

しかし、あなたはlikeを使ってやりたいことができます。

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

暗黙のペナルティがあるため、インデックスを使用できません。 – MatBailie

+0

比較前にSchoolGrades/MostRecentGradeの空白を空の文字列に置き換える価値があるかもしれません – nee21

関連する問題