, используя cast
вместо recast
(примечание 'Frequency'
теперь 'value'
)
df <- data.frame(Category = c("First","First","First","Second","Third","Third","Second")
, value = c(10,15,5,2,14,20,3))
install.packages("reshape")
result<-cast(df, Category ~ . ,fun.aggregate=sum)
, чтобы получить:
Category (all)
First 30
Second 5
Third 34
Если у вас есть все совпадающие строки, то inner join
хорошо. Я бы не стал рекомендовать full outer join
, если вам небезразличны несоответствия. Вместо этого union all
предлагает подход:
select code1,
sum(month1) / nullif(sum(month1_2), 0) as ratio_1,
sum(month2) / nullif(sum(month2_2), 0) as ratio_1,
sum(month3) / nullif(sum(month3_2), 0) as ratio_1,
from ((select t1.code1, month1, month2, month3
from t1
) union all
(select t2.code1, null, null, null, t2.month1 as month1_2, t2.month2 as month2_2, t2.month3 as month3_2
from t2
)
) t
group by code1;
Вот то, что я придумал, основываясь на этой ссылке разделить столбец из одной таблицы в столбец из другой таблицы
SELECT ISNULL(T1.Code,T2.Code) AS Code
, CASE WHEN ISNULL(T1.Month1,0) = 0 THEN ISNULL(T2.Month1,0)
ELSE ISNULL(T2.Month1,0)/ISNULL(T1.Month1,0)
END AS Month1,
CASE WHEN ISNULL(T1.Month2,0) = 0 THEN ISNULL(T2.Month2,0)
ELSE ISNULL(T2.Month2,0)/ISNULL(T1.Month2,0)
END AS Month2,
CASE WHEN ISNULL(T1.Month3,0) = 0 THEN ISNULL(T2.Month3,0)
ELSE ISNULL(T2.Month3,0)/ISNULL(T1.Month3,0)
END AS Month3
FROM #TempBidCost AS T1
FULL JOIN #TempBidRevenue AS T2 ON T1.Code = T2.Code
UNION объединяет строки, так что это то, что вам нужно, чтобы расположить одну таблицу поверх другой, но соединяет стеки столбцов друг с другом
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2
вы можете использовать внутреннее соединение
select
t1.Code1,
(t1.month1 * 1.0) / t2.month1 as month1,
(t1.month2 * 1.0) / t2.month2 as month2,
(t1.month3 * 1.0) / t2.month3 as month3
from t1
inner join t2 on t1.code1 = t2.code1
Обратите внимание, что:
Из предоставленных образцов данных, кажется, что нет необходимости в полном внешнем соединении , Если данные от 1 до 1, лучше использовать внутреннее соединение для оценки производительности