2013-03-20 3 views
0

Есть ли способ заказать 2 запроса в одном наборе результатов?SQL Сочетание 2 наборов результатов упорядоченным способом

Более конкретно, если у меня было 2 запросов:

select 'line',product, numeric_value from numbertable order by product; 

select 'Total',product, sum(numeric_value) from numbertable group by product; 

Есть ли способ объединить два запроса, так что результирующий набор будет выглядеть следующим образом:

Type  Product  numeric_value 

    line  item1  23 
    line  item1  57 
    line  item1  23 
    Total  item1  103 
    line  item5  20 
    line  item5  50 
    line  item5  60 
    Total  item5  130 
    ... 

В принципе, я m, чтобы просмотреть все записи о товаре продукта, затем указать сумму для них, затем перечислить все записи о товарах следующего продукта и т. д.

Есть ли способ сделать это, или это невозможно задача? Спасибо :)

+1

Укажите, что вы планируете использовать СУБД, добавив соответствующий тег (Oracle, SQL Server, MySQL и т. Д.). Могут быть ответы, которые используют преимущества языка или функций продукта, которые не поддерживаются повсеместно. Кроме того, пометив его с помощью конкретной СУБД, ваш вопрос может привлечь внимание от людей, которые лучше подходят для ответа. – Taryn

+0

В этом случае я бы выполнил «UNION», а затем «ORDER BY product, type». Это просто работает, потому что 'Total' больше, чем' line'. –

+0

Rolan Какой сервер баз данных? – ErikE

ответ

2

Во многих базах данных вы можете сделать это с помощью rollup. Однако, так как вы получили это далеко:

select * 
from ((select 'line' as which, product, numeric_value from numbertable 
    ) union all 
     (select 'Total', product, sum(numeric_value) from numbertable group by product 
    ) 
    ) t 
order by Product, which 

order by Product, which, объединяет все производственные линии вместе. «Итого» является последним из-за заказа.

+0

Удивительно, что в SQL Server вы можете сделать это следующим образом: '(SELECT a = 1, b = 2 UNION ALL SELECT 3, 4) ORDER BY a;' поэтому в этой СУБД можно не требуется внешний символ «SELECT» или имя производной таблицы. – ErikE

+0

@ErikE. , , Я почти всегда пишу свои «союзы» в разделе 'from'. Таким образом, мне не нужно помнить, что «где» применяется к последнему запросу, но «порядок» применяется к полному набору. И этот 'limit' применяется к полному набору, но' group by' применяется только к последнему запросу. –

+0

Вот для чего скобки в моем коде выше! Вы получаете тот же эффект от того, что «ORDER BY» применяется только ко всему набору, и никакой «GROUP BY» не делает. – ErikE

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