Ниже приведен SQL-запрос, который дает неверные результаты.Неправильный результат при соединении двух таблиц
Select ASXCode.Stock_Code, Count(Bought.Number_Bought) as Transactions,
SUM(Bought.Number_Bought) as Bought,
SUM(Bought.Total_Cost)/SUM(Bought.Number_Bought) AS Average_Price,
SUM(Bought.Acc_Interest) as Interest,
SUM(Income.Total_Income)/COUNT(Bought.Number_Bought) as Derived_Income,
Sum(Bought.Total_Cost + Bought.Acc_Interest + Income.Neg_Total_Income)/SUM(Bought.Number_Bought) as Breakeven
FROM
ASXCode
LEFT JOIN
Bought ON Bought.Stockid = ASXCode.Stockid
LEFT JOIN
Income ON ASXCode.Stockid = Income.Incomeid
GROUP BY
ASXCode.Stock_Code
Приведенные выше результаты SQL запроса в DataGridView следующим образом:
Stock_Code|Transactions|Bought|Average_Price|Interest|Derived_Income| Breakeven
ASL 2 10000 0.45 15.00
RCR 2 5000 1.90 55.35
SKE 6 20000 1.27 148.97 1071.43 0.96
Есть две проблемы с этой таблицей. Общий доход был умножен на количество транзакций при расчете цены безубыточности. Правильная цена безубыточности составляет около 1,22. Эта часть запроса может быть исправлена, если я могу добавить «делить на сумму COUNT Number_Rows». Однако я не смог включить это в запрос. Во-вторых, поскольку нет дохода для двух других холдингов, поля дохода равны Null, и я думаю, что это делает невозможным рассчитать цену безубыточности. Я думал, что эта проблема может быть решена путем включения в запрос «где доход не равен нулю». Однако, несмотря на различные попытки включить такое заявление в запрос, я нарисовал пробел. Мне очень хотелось бы думать, что есть решение моих проблем.
Посмотрите на то, что запрос возвращает без заполнителей и группы. – JimmyB
Кроме того, присоединяется к штоку на доход, на самом деле то, что вы хотите? Каковы мощности? - Добавьте небольшой образец данных. – JimmyB
Я думаю, что я мог бы предложить лучшее решение, если бы знал схему Дохода, но я угадаю, что для данного товара есть одна позиция, правильно? если это так, создайте CTE с тем же запросом, но исключите ссылки на «Доход». Затем присоединитесь к CTE к Доходу. Это решит первую проблему. – Greg