2017-06-13 97 views
-2

我似乎得到这个错误试图运行下面的查询:SQL查询不工作

SELECT 
to_char(EFFECTIVE_DT,'YYYY-MM') as YYYYMM, 
--EFFECTIVE_DT, 
AH01_PAYMENT_STATUS_CTD, 
TSYS_ACCT_ID 
FROM OIS_TSYS.AH_CYCLE_HIST 
WHERE 1=1 
AND EFFECTIVE_DT BETWEEN '01-MAY-2017' AND '31-MAY-2017' 
GROUP BY 2 
ORDER BY 1 

错误:ORA-00979:不是GROUP BY表达式

我想按日期进行分组,因为目前我每天为每个个人账户获得结果。

Result set: 
65589 N 03-MAY-17 
65590 S 03-MAY-17 
65591 M 03-MAY-17 
65592 F 03-MAY-17 
65617 G 03-MAY-17 

任何帮助是惊人的。

最佳, 萨阿德

+3

您的结果集与查询不符?另外,你为什么分组2?这意味着你正在按字面值2分组,这意味着所有行将在组中。这有点毫无意义\ *。特别是因为你没有任何东西可以聚合 - 不存在count/max/min函数。也许你打算区分? \ **分组依据不理解对选定列的位置参考,因为它是在考虑列列表之前计算的。* – Boneist

+0

分组2 表示您按选择语句 –

+1

@EstebanP的第二列进行分组。 - Oracle不允许按位分组。只有'order by'才能识别。 (您可以通过不在选择列表中的列进行分组,以便开始......但我想您也可以按顺序排列。) –

回答

0

当 “基团通过2” 时,所有其他列必须具有一个聚集函数等(SUM,AVG,最小值,最大值,..)

的“1 = 1 “是相当无用的

+0

谢谢。如果我只是1分组呢? –

+0

你期望结果如何? 你为什么要分组你的结果? 请记住:所有不在您的group by子句中的列必须具有汇总函数,例如sum/avg/min/max –

+0

我希望结果集看起来像这样65589 N MAY -17 65590 S MAY- 17 65591 M MAY -17 65592 F MAY -17 65617 G MAY-17(按月份,例如5月,它给我S中的账户数量,然后M,然后F等) –

0

要获得所需的结果,请使用以下查询: 在任何查询中应用group by子句时,如果select子句中有多个colum,则不能只在group by子句中放置一列除了总和功能,如总和,计数,最小值,最大值等,所以在你的情况下,你必须把所有三个您在select子句中选择的组中的列。

SELECT 
    TSYS_ACCT_ID, 
    AH01_PAYMENT_STATUS_CTD, 
    to_char(EFFECTIVE_DT,'YYYY-MM') as YYYYMM 
    FROM OIS_TSYS.AH_CYCLE_HIST 
    WHERE EFFECTIVE_DT BETWEEN '01-MAY-2017' AND '31-MAY-2017' 
    GROUP BY 
    TSYS_ACCT_ID, 
    AH01_PAYMENT_STATUS_CTD, 
    to_char(EFFECTIVE_DT,'YYYY-MM') 
    ORDER BY 1