根据所选月份返回查询

时间:2016-09-29 23:09:27

标签: sql

我正在尝试向SELECT的所有记录编写SQL语句,并检查特定月份。我有一个表单,其中包含1月到12月的复选框,具体取决于选中的复选框,它将执行SQL查询以返回所选月份的行。

我无法想到WHERE条件可以使其发挥作用,我只能考虑使用IF WHERE MONTH(happened_at) = 1 AND MONTH(happened_at) = 3条件执行78个不同的查询,依此类推,直到所有可用选项都为止覆盖。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

那就是:你通过添加一个逗号和那个月号在括号内创建月份列表,然后你复制除了第一个逗号之外的所有内容并将它放在括号中......

答案 2 :(得分: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