Как умножить сумму одного столбца на запись строки в SQL, т.е. сумму (имя_ столбца) * имя столбца - PullRequest
0 голосов
/ 21 июня 2019

Невозможно понять, как использовать формулу умножения общего количества столбца на запись строки.

Попробовал код ниже

SELECT g.Item_No, (sum(g.units)* u.Unit_Percentage) as Units@2018Mix
FROM Global_GM_2019 g
FULL JOIN UnitMix_perc_2018 u 
ON u.item_no=g.item_no
GROUP BY g.item_no;

Я получаю ошибку, которая, как я знаю, должна включать все столбцы в группе по функциям.

Msg 8120, Level 16, State 1, Line 275
Column 'UnitMix_perc_2018.Unit_Percentage' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Ожидаемое

Products    units of 2019   % of units of 2018  product mix
a              110                     34            20570
b              120                     23            13915
c              120                     12            7260
d              130                     12            7260
e              125                     23            13915

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

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Я сомневаюсь, что вы действительно хотите FULL JOIN, потому что вы получите строки, которые NULL.

Основываясь на вашем описании, я думаю, что вы хотите:

SELECT g.Item_No, SUM(g.units * u.Unit_Percentage) as Units_2018Mix
FROM Global_GM_2019 g LEFT JOIN
     UnitMix_perc_2018 u 
     ON u.item_no = g.item_no
GROUP BY g.item_no;

Другими словами, умножьте перед , выполнив SUM().

0 голосов
/ 21 июня 2019

Попробуйте вычислить сводную таблицу и затем присоединиться (это, вероятно, будет выполнено быстрее, так как объединение, вероятно, будет меньше).

Select item_No, unit_sum * Unit_Percentage as Units@2018Mix
From (
  SELECT item_no, sum(g.units) as unit_sum
  FROM Global_GM_2019
  Group by item_no
) as g
  FULL JOIN UnitMix_perc_2018 u 
  ON u.item_no=g.item_no

Или просто перевести расчет в сумму

SELECT g.Item_No, sum(g.units* u.Unit_Percentage) as Units@2018Mix
FROM Global_GM_2019 g
FULL JOIN UnitMix_perc_2018 u 
ON u.item_no=g.item_no
GROUP BY g.item_no;

Или добавьте скаляр в процентах к группе туров.

SELECT g.Item_No, (sum(g.units)* u.Unit_Percentage) as Units@2018Mix
FROM Global_GM_2019 g
FULL JOIN UnitMix_perc_2018 u 
ON u.item_no=g.item_no
GROUP BY g.item_no, u.unit_percentage:

В ответ на поток комментариев ... @sag, ты вроде как обманываешь - ты задаешь два вопроса в одном. Два вопроса:

  1. У меня синтаксическая ошибка в опубликованном запросе. (Выражение «Я знаю, что должен включать все столбцы в группе по функции» не отменяет этот момент. Если вы это знаете, вы должны сделать это в своем оригинальном сообщении. создать пример Minimal, Complete, Verifiable .)
  2. Я не собираюсь рассказывать вам, как он хранится и как его вычислять, но я хочу получить некоторые данные за два года в моих 4 столбцах вывода.

Я ответил на вопрос 1 тремя способами. Я могу только догадываться по вопросу 2 (потому что вы не предоставили никаких деталей в своем вопросе на эту тему). Вот мое предположение.

SELECT g.Item_No,
     sum(g19.units),
     (sum(g18.units)* u.Unit_Percentage) as Units@2018Mix,
     /* Maybe */ (sum(g19.units) (double) / sum(g18.units) * 100.0 as g19_pcnt_increase_over_g18  /*???*/
     /* I have no idea how you intend to calculate "product mix" because you provide zero information on this topic. */
FROM Global_GM_2019 g JOIN Global_gm_2018 as G18 on
       g.item_id = g18.item_id
FULL JOIN UnitMix_perc_2018 u 
ON u.item_no=g.item_no
GROUP BY g.item_no, u.unit_percentage:

Мы можем предоставить только ответы на вопрос, который вы задали , для которого вы предоставляете некоторую вспомогательную информацию . Опять же, пожалуйста, обратитесь к тому, как создать пример Minimal, Complete, Verifiable .

.
...