2016-09-29 78 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