2016-07-20 28 views
0

Ich versuche, die Schul-ID basierend auf der neuesten Grad-Spalte zu isolieren. Dies zeigt an, für welche Schulen ein Schüler eingeteilt ist. Ich bin nicht sicher, wie man eine Schnur basierend auf einem Spaltenresult sucht. Was ist der beste Weg, den Schulid zu isolieren?TSQL - Wie suchen Sie eine Spalte, die eine Zeichenfolge enthält, die eine andere Spalte verwendet?

Vielen Dank.

Daten:

enter image description here

Gewünschtes Ergebnis:

enter image description here

SQL Fiddle Code: (. Ich habe Mühe, das Schema ohne Fehler zu bauen)

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

Speichern durch Komma getrennte Daten wie in einem Feld ist sehr schlecht Datenbank-Design, die sich stark Anfragen wie diese erschweren wird. – Siyual

+2

Normalisieren Sie diese durch Trennzeichen getrennten Werte in einer 1-zu-Viele-Tabelle, Ihre Probleme mit diesem Design beginnen gerade erst ... –

+0

Können Sie bitte Ergebnis als Text formatieren, Bilder in einigen Domänen blockiert werden – TheGameiswar

Antwort

3

Erstens haben Sie eine sehr schlechte Datenstruktur. Sie sollten keine Listen in einer einzelnen Spalte speichern. Sie sollten eine separate Tabelle mit einer Zeile für jede Klasse in jeder Schule haben. Oder haben Sie Max- und Min-Spalten für die Noten in einer Schule - vorausgesetzt, die Schulen haben aufeinanderfolgende Noten.

Aber können Sie tun, was Sie wollen mit like:

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

Mit der implizierten Strafe, dass es keine Indizes verwenden kann. – MatBailie

+0

Es könnte sich lohnen, alle Leerzeichen in SchoolGrades/MostRecentGrade vor dem Vergleich mit einer leeren Zeichenfolge zu ersetzen – nee21

Verwandte Themen