我有一張桌子,我必須每個月收回要上課的小組的計數,這個檢查必須每三個月進行一次,最終輸出應該是這樣的:計數不會退回0
Gruppi A nel mese di Luglio 20
Gruppi A nel mese di Agosto 18
Gruppi A nel mese di Settembre 5
Gruppi B nel mese di Luglio 8
Gruppi B nel mese di Agosto 0
Gruppi B nel mese di Setembre 12
這是我的查詢:
WITH T AS (
SELECT GROUPS.GROUP_NAME || ' nel mese di ' || TO_CHAR(REVIEW.REVIEW_DATE, 'Month') AS FORMAT_MONTH,
COUNT(*) AS COUNT_GROUPS
FROM REVIEW
INNER JOIN GROUPS ON REVIEW.ID = GROUPS.ID
WHERE GROUP_TYPE = 1
AND GROUP_MASTER = 50
AND TO_CHAR(REVIEW.REVIEW_DATE, 'YYYYMM')
IN ((SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20160701', 'YYYYMMDD'), 0), 'YYYYMM') FROM DUAL),
(SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20160701', 'YYYYMMDD'), 1), 'YYYYMM') FROM DUAL), (SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20160701', 'YYYYMMDD'), 2), 'YYYYMM') FROM DUAL))
GROUP BY GROUPS.GROUP_NAME || ' nel mese di ' || TO_CHAR(REVIEW.REVIEW_DATE, 'Month')
UNION ALL
SELECT GROUPS.GROUP_NAME || ' nel mese di ' || TO_CHAR(REVIEW.REVIEW_DATE, 'Month') AS FORMAT_MONTH,
COUNT(*) AS COUNT_GROUPS
FROM REVIEW
INNER JOIN GROUPS ON REVIEW.ID = GROUPS.ID
WHERE GROUP_TYPE = 1
AND GROUP_MASTER = 50
AND TO_CHAR(REVIEW.REVIEW_DATE, 'YYYYMM') IN ((SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20160701', 'YYYYMMDD'), 0), 'YYYYMM') FROM DUAL),
(SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20160701', 'YYYYMMDD'), 1), 'YYYYMM') FROM DUAL),
(SELECT TO_CHAR(ADD_MONTHS(TO_DATE('20160701', 'YYYYMMDD'), 2), 'YYYYMM') FROM DUAL))
GROUP BY GROUPS.GROUP_NAME || ' nel mese di ' || TO_CHAR(REVIEW.REVIEW_DATE, 'Month')
)
SELECT *
FROM T
UNION ALL
SELECT 'Gruppi nel periodo', SUM(COUNT_GROUPS)
FROM T;
無關,而是:在'select'爲'IN'值是沒有必要的。您可以簡化爲:IN(TO_CHAR(ADD_MONTHS(TO_DATE('20160701','YYYYMMDD'),0),'YYYYMM'),...')。該表達式可以進一步簡化爲一個簡單的方法:'在日期'2016-07-01'和日期add_months('2016-07-01',2)' –
之間review.review_date請發佈一組縮減的數據, 。在這裏,我們知道你需要什麼,但不知道你從哪裏開始。另外,你的查詢有什麼問題?它是否給出錯誤?錯誤的結果? [mcve]可以是非常有用的 – Aleksej
而不是給我'Gruppi nel mese di Agosto 0'它不會顯示該行,因爲與結果不匹配 – Chrix1387