Рассмотрим таблицу, как этогоСумма по столбцам и строкам
table
+--------+---------+-----------+---------+-----------+
| BookId | ItemId1 | Quantity1 | ItemId2 | Quantity2 |
+--------+---------+-----------+---------+-----------+
| 1 | 1 | 2 | 2 | 1 |
| 1 | 3 | 1 | 2 | 1 |
| 2 | 1 | 1 | 2 | 1 |
+--------+---------+-----------+---------+-----------+
Теперь я хочу, чтобы получить сумму количества столбцов для каждого элемента, сгруппированные по книге. Как я могу взять сумму через разные столбцы? прямо сейчас я использую неловкое решение, например, создание временной таблицы, а затем запрос этого, но это должно быть возможно более элегантным способом !?
select
BookId 'BookId',
ItemId1 'ItemId',
Quantity1 'Quantity'
into #temptab
from table
union all
select
BookId,
ItemId2,
Quantity2
from table
и после этого
select
BookId,
ItemId,
sum(Quantity)
from #temptab
group by ItemId, BookId
Как я могу избавиться от этой промежуточной стадии?
Желаемый результат:
+--------+--------+----------+
| BookId | ItemId | Quantity |
+--------+--------+----------+
| 1 | 1 | 2 |
| 1 | 3 | 1 |
| 1 | 2 | 2 |
| 2 | 1 | 1 |
| 2 | 2 | 1 |
+--------+--------+----------+
Если ItemId1 соответствует ItemId2, вы хотите их сложить вместе? – Pinx0
Используйте команду UNPIVOT. –
@ Pinx0 yes right –