2016-09-29 70 views
1

我正在尝试编写一条SQL语句到SELECT所有记录中检查了特定月份。我有一个表格,它有一到十二月的复选框,具体取决于选中哪个复选框,它将执行SQL查询以返回所选月份的行。根据所选月份返回查询

我想不出WHERE这个条件来使它起作用,我只能想到用IF条件WHERE MONTH(happened_at) = 1 AND MONTH(happened_at) = 3等做了78个不同的查询,直到覆盖了所有可用的选项。

+1

我删除了不兼容的数据库标签。用您实际使用的数据库标记您的问题。而且,你在哪里得到“78”? –

+0

我以为那是可用组合的不同数量,我的数学可能是错的,现在我想它应该是12!超过4亿。 – mYxCHa

+0

你使用哪个DBMS? –

回答

0

尝试 SELECT ... WHERE MONTH(happened_at) IN (1,2,4,7)

最好的是,你要让自己熟悉VBA和代码根据功能,像这样:

Private Function CreateSQL 
Dim str As String 
str = IIf(Me.cbJan, ",1", "") & _ 
     IIf(Me.cbFeb, ",2", "") & _ 
     IIf(Me.cbAug, ",8", "") 
    str = Mid(str, 2) 
    CreateSQL = "SELECT * FROM Table1 WHERE MONTH(happened_at) IN (" & str & ");" 
End Sub 

那就是:你可以通过添加一个创造括号内的月列表逗号和那个月的号码,然后你复制除第一个逗号以外的所有内容并将其放在括号内...

+0

我不需要78个不同的查询吗?因为我需要涵盖每个选项,IN(1,2),IN(2,3,7),IN(3,6,11)' – mYxCHa

+0

你能用例子来说明你的问题吗? – Johanness

+0

所以我有一个有月份的表格(复选框),取决于1月,3月,6月,8月的检查内容。 SQL查询应该返回类似于SELECT * FROM Customer WHERE MONTH(happens_at)IN(1,3,6,8)'的东西。用户可以选择几个月的任意组合。 – mYxCHa

1

试试WHILE loop也许。

-- Declare your month. 
DECLARE @MONTH_NUM INT = 1 
-- Establish your table. 
DECLARE @TABLE TABLE 
(
    MONTH_NUM INT, 
    COL1 VARCHAR(255), 
    COL2 VARCHAR(255) 
) 
-- Set the WHILE loop cap. 
WHILE @MONTH_NUM <= 78 
-- Begin your loop. 
BEGIN 
    -- Insert your values into the table. 
    INSERT INTO @TABLE (MONTH_NUM, COL1, COL2) 
    SELECT 
     T.MONTH_NUM 
     ,T.COL1 
     ,T.COL2 
    FROM [TABLE] T 
     WHERE @MONTH_NUM = T.MONTH_NUM 
    -- Set the month counter. 
    SET @MONTH_NUM = @MONTH_NUM + 1 
END 
-- Return your results. 
SELECT 
    T.MONTH_NUM 
    ,T.COL1 
    ,T.COL2 
FROM 
    @TABLE 
0

为复选框准备12个变量。然后为它们分配数值:

if <checkbox1 is checked> then $box01 = 1 else $box01 = 0; -- or NULL 
if <checkbox2 is checked> then $box02 = 2 else $box01 = 0; 
. . . 

然后构造查询做:

where month(happened_at) in ($box01, $box02, $box03, . . . , $box12) 

然后,想想,为什么你不只是有start_monthend_month

+0

我试图在VBA中做到这一点,当我尝试做'如果Forms!Switchboard!May = True Then'。我得到一个“对象不支持这个属性或方法”的错误,我尝试了一切,但它不会工作 – mYxCHa