2013-12-21 96 views
0

我希望在案件查詢中使用GROUP BY子句IFF它的列類型包含[銷售],爲此我把下面的查詢子串的MySQL,集團通過不工作

SELECT 
    PAYABLE_TYPE AS TYPE, 
    CASE WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') THEN PAYABLE_TYPE END AS T, 
    PAYABLE_PARTICULAR AS PARTICULAR, 
    DEBIT, 
    CREDIT, 
    PAYABLE_DATE AS DATE 
FROM PAYABLES 
WHERE PAYABLE_DATE >= $P{DateStart} && PAYABLE_DATE <= $P{DateEnd} 
GROUP BY T 

但它只完全返回2行,我擁有的是下面的圖像,綠色方框顯示我需要組合的內容。還有一件事,我需要那些分組總數來總結。由於

enter image description here

+0

你想要什麼結果?查詢工作正常,返回'type'爲'[Sales]'和'NULL'的兩行。 –

+0

我需要根據列中的值[Sale]進行分組類型 – Saqib

回答

1

您想按銷售進行分組,但保留其他行不變。讓我假設你在每一行上都有一個唯一的id,這是一個非負整數:

SELECT 
    PAYABLE_TYPE AS TYPE, 
    CASE WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') THEN PAYABLE_TYPE END AS T, 
    max(PAYABLE_PARTICULAR) AS PARTICULAR, 
    sum(DEBIT) as debit, 
    sum(CREDIT) as credit, 
    PAYABLE_DATE AS DATE 
FROM PAYABLES 
WHERE PAYABLE_DATE >= $P{DateStart} && PAYABLE_DATE <= $P{DateEnd} 
GROUP BY PAYABLE_DATE, (case WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') then -1 else id end); 
+0

但是在整個銷售過程中只需要一行,我需要在不同的日期範圍內有不同的選擇,例如,如果銷售僅在9月19日完成,那麼其他事項如庫存在,然後再在9月23日再次銷售.... – Saqib

+0

我將payable_date添加到'group by'中,它應該可以解決這個問題。 –

+0

謝謝大家,它在日期中顯示了2行甚至SEC差異,但是我用日期格式的東西做了這些。謝謝!有效 :) – Saqib

0

您在查詢中沒有聚合函數。也許你正在嘗試做這樣的事情?

SELECT TYPE, T, PARTICULAR, DATE, SUM(DEBIT), SUM(CREDIT) FROM 
(SELECT 
    PAYABLE_TYPE AS TYPE, 
    CASE WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') THEN PAYABLE_TYPE END AS T, 
    PAYABLE_PARTICULAR AS PARTICULAR, 
    DEBIT, 
    CREDIT, 
    PAYABLE_DATE AS DATE 
FROM PAYABLES 
WHERE PAYABLE_DATE >= $P{DateStart} && PAYABLE_DATE <= $P{DateEnd}) 
GROUP BY TYPE, T, PARTICULAR, DATE 
+1

MySQL支持在「group by」子句中使用列別名(http://dev.mysql.com/doc/refman/5.7/en/problems -with-alias.html)。 –

+0

明白了。我主要是一個Oracle人員。 –