Oracle SQL-组和详细信息记录

Oracle SQL-组和详细信息记录,sql,oracle,Sql,Oracle,我正在尝试构建一个Oracle SQL查询,当计数大于1时,它将为我提供按行分组的查询以及组成组的行。请参见下面的示例和进行分组的SQL查询。如有任何帮助或建议,将不胜感激 例如,使用以下数据集- ====================== ID | NAME | AUTHOR ====================== 2 | Abc | John 6 | Abc | John 3 | Xyz | Mike 4 | Abc | Mike 5 | Xy

我正在尝试构建一个Oracle SQL查询,当计数大于1时,它将为我提供按行分组的查询以及组成组的行。请参见下面的示例和进行分组的SQL查询。如有任何帮助或建议,将不胜感激

例如,使用以下数据集-

======================
 ID | NAME |  AUTHOR
======================
 2  | Abc  | John 
 6  | Abc  | John 
 3  | Xyz  | Mike 
 4  | Abc  | Mike 
 5  | Xyz  | John 
 1  | Abc  | Mike 
 7  | PQR  | Raj 


Expected Result - 
===========================
ID | NAME | AUTHOR | COUNT
===========================
   | Abc  |        |  4
2  | Abc  |  John  |    
6  | Abc  |  John  |    
4  | Abc  |  Mike  |    
1  | Abc  |  Mike  |    
   | PQR  |        |  1
   | Xyz  |        |  2
3  | Xyz  |  Mike  |    
5  | Xyz  |  John  |    


SELECT  NAME, COUNT(NAME) from (
SELECT 2 as ID, ' Abc  ' as NAME, ' John ' as AUTHOR FROM DUAL
UNION 
SELECT 6 as ID, ' Abc  ' as NAME, ' John ' as AUTHOR FROM DUAL
UNION
SELECT 3 as ID, ' Xyz  ' as NAME, ' Mike ' as AUTHOR FROM DUAL
UNION
SELECT 4 as ID, ' Abc  ' as NAME, ' Mike ' as AUTHOR FROM DUAL
UNION
SELECT 5 as ID, ' Xyz  ' as NAME, ' John ' as AUTHOR FROM DUAL
UNION
SELECT 1 as ID, ' Abc  ' as NAME, ' Mike ' as AUTHOR FROM DUAL
UNION
SELECT 7 as ID, ' PQR  ' as NAME, ' Raj ' as AUTHOR FROM DUAL)
GROUP BY NAME
ORDER by NAME;

按姓名和作者计数分组的数据:

SELECT NULL id, name, NULL author, count(author) "count"
FROM myTable
GROUP BY name
当有多个作者时,再加上详细信息:

SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
把它们放在一起,稍微整理一下,得到想要的结果

SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
UNION ALL
SELECT NULL id, name, NULL author, count(author) "count"
FROM myTable
GROUP BY name
ORDER BY 2, 4, 1, 3

对不起,我不明白。为什么要从一个包含字段的表中选择固定数据(如ID为2,名称为abc等)?为什么是工会?返回不同名称和计数的查询很容易完成,我可以帮助您完成这一点,但其余的我不理解。请澄清。您正在进行多个表格扫描,因此我确信这是最佳选择。
SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
SELECT id, name, author, NULL "count"
FROM mytable
WHERE name NOT IN (SELECT name FROM myTable GROUP BY name HAVING count(1) = 1)
UNION ALL
SELECT NULL id, name, NULL author, count(author) "count"
FROM myTable
GROUP BY name
ORDER BY 2, 4, 1, 3