Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按分组显示数据_Sql_Group By_Jasper Reports_Ireport - Fatal编程技术网

Sql 按分组显示数据

Sql 按分组显示数据,sql,group-by,jasper-reports,ireport,Sql,Group By,Jasper Reports,Ireport,我正在运行一个查询,该查询通过内部联接从多个表和条件中获取数据。我希望此查询按单个列分组,但当我这样做时,我得到:ORA-00979:不是按表达式分组,错误消息。根据我的理解,这是因为其他表列不支持此分组 我编写此查询是为了从iReport生成报告。例如,在下面的专栏中,我从三个不同的表格中获得了详细信息、食物和爱好,我想按名称组合这个结果组 Name | food | hobby ------------------------- peter | chips | trav

我正在运行一个查询,该查询通过内部联接从多个表和条件中获取数据。我希望此查询按单个列分组,但当我这样做时,我得到:
ORA-00979:不是按表达式分组,错误消息。根据我的理解,这是因为其他表列不支持此分组

我编写此查询是为了从iReport生成报告。例如,在下面的专栏中,我从三个不同的表格中获得了详细信息、食物和爱好,我想按名称组合这个结果组

Name  |    food |     hobby 
-------------------------
peter | chips   | traveling 
peter | burger  | tennis 
peter | burger  | writing 
Dave  | lamb    | game 
Dave  | kebab   | reading 
我想要的好结果是:在这里我只想得到一次名称和相应的所有值(即使是重复的),而其他重复的名称行不应该包含任何数据。请帮助我进行此sql查询。。如果iReport中有任何选项可以执行此操作,请让我知道,或者sql中的任何其他关键字/内部查询,在您设计表时,我尝试了按选项分组。。但它不起作用。。。提前谢谢

Name | food     |  hobby 
-------------------------------------------------------------- 
peter  | chips  | traveling 
------ | burger | tennis 
------ | burger | writing 
Dave   | lamb   | game 
-------| kebab  | reading
查询:

选择org.Location作为组织位置,list.listId作为列表位置,org.Centre作为组织中心,
组织部门作为组织部门,组织职位作为组织职位,q内容作为q内容,
q、 dueTime作为q_dueTime,a.submitted_日期作为a_submitted_日期,list.frequency作为list_frequency,
a、 注释作为注释,a.userid作为用户id,a.submitted作为提交
从org.id=list.org\u id上的组织内部联接列表在klist.id=q.list\u id上的内部联接q在qid=a.q\u id上的内部联接a
其中a.submitted=0和list.listid='xyz'

我想按列表对它们进行分组。listid

您的查询不包含“姓名”、“食物”或“爱好”,因此我有点困惑,但下面的查询应该可以帮助您创建自己的查询以实现所需的目标

SELECT 
CASE WHEN X.VERIFY_COL = 1 THEN X.YOUR_UNIQUE_COL ELSE NULL END AS YOUR_COL_NAME,
* FROM 
    (SELECT 
        ROW_NUMBER() OVER (PARTITION BY YOUR_UNIQUE_COL ORDER BY YOUR_UNIQUE_COL) AS VERIFY_COL,
        * FROM YOUR_VIEW
    ) X
您可以按您希望在查询中只包含一次的列对数据进行分区
您的\u UNIQUE\u COL
。然后利用
ROW\u COUNT()
NULL
设置为
ROW\u COUNT()>1
的所有行名称。
请注意,这是SQL SERVER解决方案。您使用什么数据库引擎?

我认为您不需要对数据进行分组,请尝试禁用“打印重复值”

您使用的是哪种数据库管理系统?这很容易使用窗口函数。据我所知,您的代码实际上是ANSI SQL,而不是特定于SQL Server的(并且适用于几乎所有现代的DBMS)。MySQL没有与之相当的
行号。
。是的,这就是为什么我在注释中包含“接近”和“现代”。在SQL标准中包含窗口函数10年后,窗口函数现在可以被视为主流,就像外键、存储过程或视图一样。任何未实现它们的DBMS都落后10年。有些东西我不会称之为“现代”——但这当然是我个人的观点。