Расчет соотношения между двумя одинаковыми столбцами таблицы в SQL Server

, используя 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
-1
задан marc_s 16 January 2019 в 05:24
поделиться

4 ответа

Если у вас есть все совпадающие строки, то 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;
0
ответ дан Gordon Linoff 16 January 2019 в 05:24
поделиться

Вот то, что я придумал, основываясь на этой ссылке разделить столбец из одной таблицы в столбец из другой таблицы

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
0
ответ дан SP1 16 January 2019 в 05:24
поделиться

UNION объединяет строки, так что это то, что вам нужно, чтобы расположить одну таблицу поверх другой, но соединяет стеки столбцов друг с другом

SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2
0
ответ дан Zabi Sidiqkhil 16 January 2019 в 05:24
поделиться

вы можете использовать внутреннее соединение

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, лучше использовать внутреннее соединение для оценки производительности

0
ответ дан Derviş Kayımbaşıoğlu 16 January 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: