2013-12-21 97 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人员。 –