在单个单元格中根据多个条件选择记录

问题描述 投票:0回答:1

我正在使用一个设置为显示多个值的数据库,用逗号分隔,如下所示:

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

任何帮助赞赏。

sql sql-server tsql
1个回答
3
投票

您不应该以逗号分隔的字符串存储值列表。这不是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
© www.soinside.com 2019 - 2024. All rights reserved.