我正在尝试编写一条SQL语句到SELECT
所有记录中检查了特定月份。我有一个表格,它有一到十二月的复选框,具体取决于选中哪个复选框,它将执行SQL查询以返回所选月份的行。根据所选月份返回查询
我想不出WHERE
这个条件来使它起作用,我只能想到用IF
条件WHERE MONTH(happened_at) = 1 AND MONTH(happened_at) = 3
等做了78个不同的查询,直到覆盖了所有可用的选项。
我正在尝试编写一条SQL语句到SELECT
所有记录中检查了特定月份。我有一个表格,它有一到十二月的复选框,具体取决于选中哪个复选框,它将执行SQL查询以返回所选月份的行。根据所选月份返回查询
我想不出WHERE
这个条件来使它起作用,我只能想到用IF
条件WHERE MONTH(happened_at) = 1 AND MONTH(happened_at) = 3
等做了78个不同的查询,直到覆盖了所有可用的选项。
尝试 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
那就是:你可以通过添加一个创造括号内的月列表逗号和那个月的号码,然后你复制除第一个逗号以外的所有内容并将其放在括号内...
试试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
为复选框准备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_month
和end_month
。
我试图在VBA中做到这一点,当我尝试做'如果Forms!Switchboard!May = True Then'。我得到一个“对象不支持这个属性或方法”的错误,我尝试了一切,但它不会工作 – mYxCHa
我删除了不兼容的数据库标签。用您实际使用的数据库标记您的问题。而且,你在哪里得到“78”? –
我以为那是可用组合的不同数量,我的数学可能是错的,现在我想它应该是12!超过4亿。 – mYxCHa
你使用哪个DBMS? –