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年。有些东西我不会称之为“现代”——但这当然是我个人的观点。