我正在嘗試編寫一條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? –