由子串mysql组不起作用

时间:2013-12-21 17:05:09

标签: mysql group-by substring

我想在查询中使用GROUP BY子句,如果IFF它的列TYPE包含[Sale],为此我将查询放在下面,

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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