Добавление средних значений в таблицу

У меня есть таблица

| Location | Unit | ... +----------|------+---- | A | 1 | ... | A | 1 | ... | B | 1 | ... | A | 2 | ... | C | 2 | ... | ... | ... | ... 

и я хочу вычислить новую таблицу со значением «среднего» местоположения для каждой единицы в следующем смысле:

 | Location | Unit | Weight | +----------|------+--------+ | A | 1 | 0.6667 | | B | 1 | 0.3333 | | A | 2 | 0.5 | | C | 2 | 0.5 | | ... | ... | ... | 

Конечно, достаточно просто получить итоговые суммы

 select unit, location, count(*) from table1 group by unit, location; 

и создать таблицу

 create table table2 (Unit nvarchar(50), Location int, Weight float); 

но я не уверен, как заполнить его средними данными. (Это не сложно, но как-то я застрял … прошло много лет с тех пор, как я работал на SQL Server.)

Для этого вы должны использовать COUNT OVER :

 select distinct location, unit, cast(count(*) over (partition by unit, location) as decimal) / cast(count(*) over (partition by unit) as decimal) as weight from mytable order by unit, location; 

SQLFiddle

Вы хотите сделать средневзвешенное значение, с единицами веса. Вам нужно как сумма для каждой комбинации местоположения / единицы, так и общая сумма для каждого location . Чтобы создать свой результат:

 select location, unit, (1.0*unit) / sum(unit) over (partition by location) from table1 group by location, unit; 

1.0* – это просто быстрый способ преобразования в десятичное значение, если unit фактически является целым числом.

РЕДАКТИРОВАТЬ:

Если вы просто хотите подсчеты, то это должно работать:

 select location, unit, count(*) as cnt, (1.0*count(*)) / sum(count(*)) over (partition by unit) from table1 group by location, unit; 

Хотя вы не сказали, что есть весовая колонка, я предполагаю, что должно быть (в противном случае, что вы имеете в виду по весу?)

 select unit, location, AVG(weight) from table1 group by unit, location; 

как выражение выбора

 select unit, location, AVG(weight) into table2 from table1 group by unit, location; 

как вставка в новую таблицу

Давайте будем гением компьютера.