2016-07-20 3 views
0

가장 최근 학년 칼럼을 기반으로 학교 ID를 격리하려고합니다. 이것은 학생이 어떤 구역에 속해 있는지 보여줍니다. 열 결과를 기반으로 문자열을 검색하는 방법을 잘 모르겠습니다. schoolid를 격리시키는 가장 좋은 방법은 무엇입니까?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

쉼표로 구분 된 값을 일대 다 테이블로 정규화하면 그 디자인의 문제는 단지 시작에 불과합니다 ... –

+0

일부 도메인에서 이미지가 차단 될 수 있습니까? – TheGameiswar

답변

3

먼저 데이터 구조가 매우 형편 없습니다. 목록을 단일 열에 저장하면 안됩니다. 각 학교의 각 학년마다 한 행으로 된 별도의 표가 있어야합니다. 또는 학교 성적이 최대 및 최소 인 경우 - 학교에 연속 성적이 있다고 가정합니다.

그러나, 당신은 당신이 like을 사용하여 원하는 일을 할 수 있습니다

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

묵시적인 처벌로 인해 색인을 사용할 수 없습니다. – MatBailie

+0

비교하기 전에 SchoolGrades/MostRecentGrade의 공백을 빈 문자열로 대체하는 것이 좋습니다. – nee21

관련 문제