Можете ли вы объяснить логику такого сценария
У меня есть 2 таблицы
СТОЛ ДЛЯ СТУДЕНТОВ
CHECK-UP(PK) STUDENTID DATE
1001 1 06/15/1980
1002 1 07/30/1980
1003 1 12/28/1980
1004 2 03/22/1981
1005 2 01/28/1981
1006 3 04/20/1981
ТАБЛИЦА ДЕЯТЕЛЬНОСТИ
CHECK-UP INDEX VALUE
1001 1 SMOKING
1001 2 ALCOHOL
1001 3 DRUGS
1002 1 SMOKING
1002 2 ALCOHOL
1003 1 SMOKING
1003 3 DRUGS
1004 3 DRUGS
Я использовал простое внутреннее соединение двух таблиц, чтобы получить все записи, соответствующие значению '%SMOKING%'
.Это дает мне 3 строки, которые имеют значения курения, и набор результатов будет 1001,1002,1003
, а соответствующий идентификатор студента будет равен 1.
Что мне нужно сделать, чтобы найти информацию о курении для всех студентов?
В этом случае я должен сначала выполнить левое соединение между таблицами, чтобы получить все записи, но в моем случае это не работает, чтобы включить всех студентов.Пожалуйста посоветуй.Ниже приведен фрагмент кода.
Select DISTINCT STUDENTID
,CHECK-UP
,INDEX
,CAST(VALUE as VARCHAR(MAX)) --CASTING IT SINCE IT IS A TEXT FIELD
,CASE
WHEN (PATINDEX('%SMOKING%',act.VALUE)) THEN
'LMDO'
WHEN (PATINDEX('%NOT SMOKING%',act.VALUE)) THEN
'LMD1'
WHEN (ISNULL(CAST(act.VALUE as varchar(max)),'')='') THEN
'CLEAR'
ELSE
'CLEAR'
END done
FROM STUDENT stu
LEFT JOIN ACTIVITY act
ON stu.CHECK-UP=act.CHECK-UP
WHERE ??
Если предположить, что на studentID=3
у студента нет места для курения.Я хочу, чтобы это значение вошло в «CLEAR».ТАКЖЕ я не могу поставить условие в WHERE CLAUSE, так как это ограничит мои данные.Что можно сделать, чтобы решить эту проблему?
Я ожидаю, что набор результатов будет примерно таким:
STUDENTID CHECK-UP INDEX VALUE DONE DATE
1 1001 1 SMOKING LMDO 06/15/1980
1 1002 1 SMOKING LMDO 07/30/1980
1 1003 1 SMOKING LMDO 12/28/1980
2 1004 NULL NULL CLEAR 03/22/1981
2 1005 NULL NULL CLEAR 01/28/1981
3 1006 NULL NULL CLEAR 04/20/1981