SQL需要帮助来分组我的结果

时间:2017-03-09 16:28:22

标签: php sql oracle

嘿,我想要从我的oracle DB中显示一些数据。我希望通过普通数据/专栏对其进行分组,但无法弄明白。

enter image description here

$stid = oci_parse($conn, " SELECT REQ.REQSTN_NO, REQ.WO_NO, REQ.COST_CENTRE_CD, REQ.ACCT_PRIME_CD, REQ.ACCT_SUBSDRY_CD, REQ.STOCK_CD    
                             FROM TE.REQSTNREQ                              
                             WHERE REQ.DEPT_CD='ISN'");
oci_execute($stid);
while (($row = oci_fetch_array($stid, OCI_BOTH+OCI_RETURN_NULLS)) != false) {
  echo $row['COST_CENTRE_CD']."-".$row['ACCT_PRIME_CD']."-".$row['ACCT_SUBSDRY_CD']." ".$row['WO_NO']." ".$row['REQSTN_NO']." ".$row['STOCK_CD']."<br />";
}

我想创建一个像这样的输出

enter image description here

我已经尝试了Group BYSUM/COUNT,但我不知道如何正确构建代码,任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

这不是真正的数据库“分组” - 这是一个显示问题:您希望将具有公共列值的行组合在一起并仅打印每个共享列值一次。

此类显示问题最好留给应用程序的表示层,最好不要在SQL /数据模型层之外。

尽管如此,这里有一种技术可用于将公共列值组合在一起,并使用SQL打印每个值一次。

(由于您未以文本形式提供数据,因此本示例使用T& operator *() { return (*array)[currentPosition]; } 来说明该技术。

DBA_OBJECTS

这个想法是SELECT -- Order the row_number () partitions the same way the overall query is ordered... case when row_number() over (partition by object_type order by object_type, owner, object_name) = 1 THEN object_type ELSE NULL END object_type, case when row_number() over (partition by object_type, owner order by object_type, owner, object_name) = 1 THEN owner ELSE NULL END owner, object_name, created, last_ddl_time FROM dba_objects o ORDER BY -- Important to qualify columns in ORDER BY... o.object_type, o.owner, o.object_name; 语句检查这是否是新共享公共值中的第一行,并且只有这样才能打印列值。否则,它会打印case

答案 1 :(得分:-1)

您需要使用对象关系数据库来实现这样的结果。

编辑回答:

在MySQL中,您可以使用以下函数:GROUP_CONCAT:

参见参考:https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_group-concat

我相信在oracle中有类似的解决方案。您需要参考以下问题: Is there any function in oracle similar to group_concat in mysql?