Sql server 2008 选择where子句(多列中的多个值)

Sql server 2008 选择where子句(多列中的多个值),sql-server-2008,Sql Server 2008,我有下面的select语句。我基本上要做的是选择所有行,其中manager和year等于下面sql中显示的值,而fcst_jan到fcst_dec列不包含这些值之一。对于一些人来说,这似乎是可行的,但我仍然得到了其中一列中包含205的行。所以基本上我想选择任何列jan到dec不包含这些值的行。请帮忙。我想不出来。我知道我的桌子设计不是最好的方式,但它是我拥有的,所以我需要弄清楚它。我使用的是SQL Server 2008 SELECT [fcst_id] ,[fcst_emplnam

我有下面的select语句。我基本上要做的是选择所有行,其中manager和year等于下面sql中显示的值,而fcst_jan到fcst_dec列不包含这些值之一。对于一些人来说,这似乎是可行的,但我仍然得到了其中一列中包含205的行。所以基本上我想选择任何列jan到dec不包含这些值的行。请帮忙。我想不出来。我知道我的桌子设计不是最好的方式,但它是我拥有的,所以我需要弄清楚它。我使用的是SQL Server 2008

SELECT [fcst_id]
      ,[fcst_emplname]
      ,[fcst_emplid]
      ,[fcst_posid]
      ,[fcst_mgrid]
      ,[fcst_sect_id]
      ,[fcst_year]
      ,[fcst_jan]
      ,[fcst_feb]
      ,[fcst_mar]
      ,[fcst_apr]
      ,[fcst_may]
      ,[fcst_jun]
      ,[fcst_jul]
      ,[fcst_aug]
      ,[fcst_sep]
      ,[fcst_oct]
      ,[fcst_nov]
      ,[fcst_dec]
      ,[fcst_comments]
  FROM [EMS].[dbo].[TEMSFCST]
  where fcst_mgrid='00809571' and fcst_year=2016 and 
  (
  fcst_jan not in (1,2,3,4,5,205,211) or 
  fcst_feb not in (1,2,3,4,5,205,211) or 
  fcst_mar not in (1,2,3,4,5,205,211) or 
  fcst_apr not in (1,2,3,4,5,205,211) or 
  fcst_may not in (1,2,3,4,5,205,211) or 
  fcst_jun not in (1,2,3,4,5,205,211) or
  fcst_jul not in (1,2,3,4,5,205,211) or 
  fcst_aug not in (1,2,3,4,5,205,211) or 
  fcst_sep not in (1,2,3,4,5,205,211) or
  fcst_oct not in (1,2,3,4,5,205,211) or 
  fcst_nov not in (1,2,3,4,5,205,211) or 
  fcst_dec not in (1,2,3,4,5,205,211)
  )

如果要获取任何月份列中没有这些值(1,2,3,4,5205211)的记录:

(
fcst_jan not in (1,2,3,4,5,205,211) or 
fcst_feb not in (1,2,3,4,5,205,211) or 
...
)
您应该更改“或”by“and”,否则如果一条记录的fcst_jan=25和fcst_feb=205,它将出现在最终结果中

(
fcst_jan not in (1,2,3,4,5,205,211) and
fcst_feb not in (1,2,3,4,5,205,211) and
...
)

如果要获取任何月份列中没有这些值(1,2,3,4,5205211)的记录:

(
fcst_jan not in (1,2,3,4,5,205,211) or 
fcst_feb not in (1,2,3,4,5,205,211) or 
...
)
您应该更改“或”by“and”,否则如果一条记录的fcst_jan=25和fcst_feb=205,它将出现在最终结果中

(
fcst_jan not in (1,2,3,4,5,205,211) and
fcst_feb not in (1,2,3,4,5,205,211) and
...
)

除非我在这里遗漏了什么,否则您只需要将
更改为
,这似乎是一个糟糕的模式/表设计。最好是有一个带有日期列(或者一个int表示月份,如果年份不重要)和值列的表,然后是一个FK列,该列链接回您的
temsfcst
表。是的,我知道它很差,但这就是我所拥有的。如果使用and,则不会得到任何行。所以它会过滤掉包含1和5的行,但由于某些原因,它们并不总是有效。您可以在返回行的位置显示示例数据吗?除非我在这里遗漏了什么,否则您只需将
更改为
,注意这似乎是一个糟糕的模式/表设计。最好是有一个带有日期列(或者一个int表示月份,如果年份不重要)和值列的表,然后是一个FK列,该列链接回您的
temsfcst
表。是的,我知道它很差,但这就是我所拥有的。如果使用and,则不会得到任何行。因此,它会筛选出包含1和5的行,但由于某些原因,它们并不总是有效。您可以显示示例数据以返回行吗?如果使用“和”,则不会返回任何记录。可能没有任何记录符合以下条件:fcst_mgrid='00809571'和fcst_year=2016,以及任何不在(1,2,3,4,52011)中的月份不,有,为此,我确信。如果我使用“和”,则不会返回任何记录。可能没有任何记录符合此标准:fcst_mgrid='00809571'和fcst_year=2016,以及任何不在(1,2,3,4,5205211)中的月份不,我确信会有。