按组显示数据

时间:2013-12-27 05:44:04

标签: sql group-by jasper-reports ireport

我正在运行一个查询,该查询从多个表中获取数据并使用内部连接获取条件。我希望此查询按单列分组,但当我这样做时,我得到:ORA-00979: not a GROUP BY expression,错误消息。根据我的理解,这是因为其他表格列不支持此组。

我写这个查询是为了从 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

查询:

SELECT org.Location AS organisation_location, list.listId as list_listid, org.Centre AS org_Centre, 
org.Department AS org_Department, org.Position AS org_Position, q.content AS q_content, 
q.dueTime AS q_dueTime, a.submitted_date AS a_submitted_date, list.frequency AS list_frequency, 
a.comments AS a_comments, a.userid AS a_userid, a.submitted as a_submitted 
FROM org INNER JOIN list ON org.id = list.org_id INNER JOIN q ON klist.id = q.list_id INNER JOIN a ON qid = a.q_id 
WHERE a.submitted=0 andlist.listid='xyz'

我想通过 list.listid

对相同的内容进行分组

2 个答案:

答案 0 :(得分:1)

您的查询不包含“名称”,“食物”或“爱好”,所以我有点困惑,但以下查询应该可以帮助您创建自己的目标。

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

您可以按照您希望在查询YOUR_UNIQUE_COL中只有一次的列对数据进行分区。然后,您可以轻松利用ROW_COUNT()为所有行的名称设置NULL ROW_COUNT() > 1。 请注意它是SQL SERVER解决方案。你使用什么数据库引擎?

答案 1 :(得分:1)

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