2015-12-01 1 views
2

У меня есть очень большие набор данных, как показано ниже (пример):Объединить строки в одном столбце и в таблице с аналогичными значениями и суммой значений

#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

MSSQL, MySQL или Oracle? – Edper

ответ

2

В MYSQL вы можете, вероятно, сделать это:

SELECT ReportName, SUM(ReportCount) as ReportsCount 
FROM (
    SELECT REPLACE(ReportName,'(PDF)','') as ReportName, ReportCount 
    FROM Reports) T 
GROUP BY ReportName 

См Demo

+0

Двойные кавычки предназначены для идентификаторов, используют одинарные кавычки для строковых литералов, например. '(PDF). (Еще лучший ответ!) – jarlh

+0

Спасибо @jarlh. Я изменю согласно вашему предложению. – Edper

0

Это должно помочь вам

select substr(report_name,8),sum(report_count) from yourtablename 
groupb by (substr(report_name,8)) 

Это Oracle Синтаксис, но каждый SQL Диалект есть "SubStr" Methode.

+2

это может не работать для «REPORTA10» или чего-либо кроме 8 символов ... – Nirman

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)', '') 
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)') удалит слово (PDF) из report_name колонны и группы по результату функции REPLACE

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] 

Это должно работать

Смежные вопросы