我的数据集非常大(如下所示):
#ID #report_name #report_count
1 ReportA1 3
2 ReportA1(PDF) 4
3 ReportA2 2
4 ReportA2(PDF) 6
5 ReportA3 7
6 ReportA3(PDF) 2
7 ReportA4 9
8 ReportA4(PDF) 7
9 ReportA5 1
10 ReportA5(PDF) 2
11 ReportA6 8
12 ReportA6(PDF) 9
13 ReportA7 8
14 ReportA7(PDF) 6
15 ReportA8 6
16 ReportA8(PDF) 7
17 ReportA9 5
18 ReportA9(PDF) 9
19 ReportA10 7
20 ReportA10(PDF) 1
我想进行 SQL查询,以便将两行合并为单行。
例如ReportA1和ReportA1(PDF)作为ReportA1。
我的问题,如何创建SQL语句来组合两行数据(即ReportA1和ReportA1(PDF)) 并将其统计为单个名称(即ReportA1),如下表所示(仅限示例)?
#ID #report_name #report_count
1 ReportA1 7
2 ReportA2 8
3 ReportA3 9
4 ReportA4 16
5 ReportA5 3
6 ReportA6 17
7 ReportA7 14
8 ReportA8 13
9 ReportA9 14
10 ReportA10 8
答案 0 :(得分:2)
在mySQL中你可能会这样做:
SELECT ReportName, SUM(ReportCount) as ReportsCount
FROM (
SELECT REPLACE(ReportName,'(PDF)','') as ReportName, ReportCount
FROM Reports ) T
GROUP BY ReportName
参见 Demo
答案 1 :(得分:0)
这应该可以帮到你
select substr(report_name,8),sum(report_count) from yourtablename
groupb by (substr(report_name,8))
这是Oracle语法,但每个SQL dialekt都有一个" substr"梅索德。
答案 2 :(得分:0)
我认为report_name字段总是因两行中的“(pdf)”字而不同。如果是这种情况,那么您可以尝试以下方法:
select ROW_NUMBER() OVER(Order by replace(report_name, '(pdf)', '')) as ID,
replace(report_name, '(pdf)', '') as report_name, sum(report_count) as report_count
FRom @temp
Group by replace(report_name, '(pdf)', '')
答案 3 :(得分:0)
可以帮助您的示例:
SELECT
report_name,
report_count
FROM
(
SELECT REPLACE(report_name, '(PDF)') AS report_name, SUM(report_count) AS report_count FROM
(
SELECT 'RPT A1(PDF)' AS report_name, 4 AS report_count FROM DUAL
UNION
SELECT 'RPT A1' AS report_name, 3 AS report_count FROM DUAL
UNION
SELECT 'RPT A2(PDF)' AS report_name, 12 AS report_count FROM DUAL
UNION
SELECT 'RPT A2' AS report_name, 5 AS report_count FROM DUAL
UNION
SELECT 'RPT A3(PDF)' AS report_name, 8 AS report_count FROM DUAL
UNION
SELECT 'RPT A3' AS report_name, 2 AS report_count FROM DUAL
)
GROUP BY REPLACE(report_name, '(PDF)')
)
ORDER BY report_name
此示例输出为:
RPT A1 7
RPT A2 17
RPT A3 10
<强>要点:强>
使用按GROUP BY REPLACE(report_name, '(PDF)')
分组将从report_name
列和组中删除{strong>(PDF)一词REPLACE
函数的结果
答案 4 :(得分:0)
在Sql Server中:
SELECT RName AS 'report_name', SUM(report_count) AS 'report_count'
FROM(
SELECT REPLACE(report_name,'(PDF)','') AS 'RName'
,report_count
FROM dbo.test)
GROUP BY [RName]
这应该有效