2015-06-24 3 views
-1

Если у меня есть база данных с именами и годовыми доходами в течение двух лет в качестве перечисляемых столбцов (я знаю, что это плохой дизайн базы данных, но я не имею права изменять его на момент). Например:Подведение столбцов на основе уникальных значений в нескольких столбцах

Name_2000, Name_2010, Income_2000, Income_2010

Как я могу построить запрос, чтобы вернуть все уникальные имена в обоих столбцах имен в первом столбце результата. Второй столбец результатов должен быть суммой всех доходов для этого имени за 2000 год. Третья должна быть суммой всех доходов для этого имени на 2010 год.

Очевидно, что в этом примере лицо (запись) может изменять имена между лет или не имеют имени в любом году.

Могу ли я сделать это в одном запросе? Возможность фильтрации по определенному подмножеству имен также будет удобна.

+0

Можете ли вы показать некоторые выборочные данные и результат, который вы пытаетесь получить? Я специально хочу понять, как вы хотите обращаться к изменениям имен. – Mureinik

+0

В той же записи было бы просто другое имя в Name_2010 и Name_2000. – Fodder

+0

Итак, вы хотите иметь две строки в результате: одно для 2000-го имени с «нулевым» для дохода 2010 года и одно для 2010 года с «нулевым» в доходе 2000 года? – Mureinik

ответ

0

Я бы предложил использовать дополнительный запрос, который объединяет результаты объединения 2, по одному для каждого набора имен и доходов, но каждый возвращает фикцию 0 для доход за другой год.

Что-то вроде этого: -

SELECT aname, SUM(aincome2000), SUM(aincome2010) 
FROM 
(
    SELECT Name_2000 AS aname, Income_2000 AS aincome2000, 0 AS aincome2010 
    FROM sometable 
    UNION ALL 
    SELECT Name_2010 AS aname, 0 AS aincome2000, Income_2010 AS aincome2010 
    FROM sometable 
) sub1 
GROUP BY aname 
+0

Святая корова. Оно работает. Не быстро, но он должен завести меня за линию. Благодарю. Я также добавил 'WHERE char_length (aname)> 1', чтобы удалить строку с нулями и пустой aname – Fodder

+0

В зависимости от индексов это можно было бы ускорить. Вы могли бы добавить свое требуемое предложение WHERE к объединенным подзапросам (где они могли бы использовать индекс), и аналогичным образом вы могли бы выполнить SUM в каждом из подзапросов. – Kickstart

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