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