2014-12-02 3 views
-1

я таблица следующим образом:очень и очень трудно запросы и группа по столбцам

A----B----C----D----F----E 
1----2----3-----4----5----6 
1----2----3-----4----5----6 
1----2----3-----4----5----6 

Теперь я хочу, чтобы сделать запрос, таблица ниже таблицу привести значение полого C, D из следующих столбцов A, в, значение в колонке F, Е следующие столбцы A, B,

A----B 
1----2 
1----2 
1----2 
3----4 
3----4 
3----4 
5----6 
5----6 
5----6 

Теперь группы с помощью столбцов и столбцов суммы B.

Финальный стол

A----B 
1----6 
3----12 
5----18 
+3

Не мог бы вы повторно написать свой вопрос более четко? Я этого не понимаю. –

+2

Является ли это сервером sql или mysql. Вы отметили их обоих, и они не то же самое. Кроме того, это не так сложно, как вы думаете. Здесь у вас 3 отличных результата, и каждый результирующий набор является простым агрегатом. –

ответ

2

Вы можете использовать Cross apply для unpivot данные затем найти sum

CREATE TABLE #test 
    (A INT,B INT,C INT,D INT,F INT,E INT) 

INSERT #test 
VALUES (1,2,3,4,5,6), 
     (1,2,3,4,5,6), 
     (1,2,3,4,5,6) 

Чтобы получить первый результат использования Cross Apply конвертировать столбец в строках

SELECT data A, 
     cname B 
FROM #test 
     CROSS apply (VALUES(b,a), 
          (d,c), 
          (e,f)) ca (cname, data) order by A 

Который должен привести

A B 
-- -- 
1 2 
1 2 
1 2 
3 4 
3 4 
3 4 
5 6 
5 6 
5 6 

Тогда из приведенного выше результата просто использовать агрегатный Sum найти сумму B сгруппированных по A

SELECT data A, 
     Sum(cname) B 
FROM #test 
     CROSS apply (VALUES(b,a), 
          (d,c), 
          (e,f)) ca (cname, data) 
GROUP BY data 

ВЫХОДА:

+==+==+ 
|A |B | 
+==+==+ 
|1 |6 | 
|3 |12| 
|5 |18| 
+==+==+ 
1

Это group by запрос на свой предыдущий ответ:

select a, sum(b) as b 
from (<previous query here>) a 
group by a; 
2

Вероятно, что-то, как это будет делать трюк:

SELECT A, SUM(B) AS B 
FROM (
    SELECT A, B FROM yourtable 
    UNION ALL 
    SELECT C, D FROM yourtable 
    UNION ALL 
    SELECT E, F FROM yourtable 
) subquery 
ORDER BY A 
GROUP BY A 

подзапрос/объединение преобразует ваш 6-столбцовый макет в 2-столбец, тогда внешний запрос группирует/summin г.