Выбор записей на основе нескольких критериев в одной ячейке - PullRequest
0 голосов
/ 25 сентября 2018

Я работаю с базой данных, настроенной на отображение нескольких значений, разделенных запятыми, как показано:

txtSiblingsYearList
7,4
9,6
8,3,N
8,3,N
5,3
5,3

Мне нужно иметь возможность запросить это и вернуть только записи, которые имеют по крайней мере2 из R, N, 1, 2, 3, 4, 5, 6

Я не уверен, что это можно сделать, учитывая способ хранения данных в таблице базы данных.Кто-нибудь знает способ сделать это.Мой текущий запрос выглядит так:

    SELECT 
      [txtSchoolID]
      ,[txtTitle]
      ,[txtForename]
      ,[txtSurname]       
      ,[txtForm]
      ,[intNCYear]      
      ,[intFamily]      
      ,[txtSiblingsIDList]
      ,[txtSiblingsNameList]
      ,[txtSiblingsFormList]
      ,[txtSiblingsYearList]      
  FROM [iSAMS].[dbo].[TblPupilManagementPupils]
  Where (intSystemStatus = 1) 
  AND (intNCYear <7) 
  AND (txtSchoolID NOT LIKE txtSiblingsIDList)  
  Order By intFamily

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 25 сентября 2018

Вы не должны хранить списки значений в строке через запятую.Это не SQL-способ ведения дел.Результирующие запросы не могут быть оптимизированы, и строковые функции не являются сильной стороной SQL.

Если вы застряли в этом формате, вы можете сложить количество совпадений:

where ( (case when ',' + txtSiblingsYearList + ',' like '%,R,%' then 1 else 0 end) +
        (case when ',' + txtSiblingsYearList + ',' like '%,N,%' then 1 else 0 end) +
        (case when ',' + txtSiblingsYearList + ',' like '%,1,%' then 1 else 0 end) +
        . . .
      ) >= 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...