Итак, первым шагом, чтобы увидеть, что происходит, является удаление СУММ и просто выберите сумму транзакции и сумму претензии. Таким образом вы можете видеть, какие данные возвращаются. Вы увидите, что соединение на A / 2007 будет иметь сумму транзакции дважды, так как она соединяет каждую строку с таблицей претензий.
Одним из решений является использование подзапросов, как вы сказали, для выполнения SUM
SELECT
Transactions.Customer,
Transactions.Year,
SumTransaction,
SumClaim
FROM (
select Customer, Year, sum(Transaction Amount) SumTransaction
from Transactions
group by Customer, Year
) Transactions
LEFT JOIN (
select Customer, Year, sum(Claim Amount) sumClaim
from Claims
group by Customer, Year
) Claims
ON Claims.Customer = Transactions.Customer
AND Transactions.Year = Claims.Year
Другое возможное решение с учетом ваших ограничений:
SELECT
Transactions.Customer,
Transactions.Year,
SUM(Transaction Amount),
(SELECT SUM(Claim Amount) from Claims where Claims.Customer = Transactions.Customer and Claims.Year = Transactions.Year)
FROM
Transactions
GROUP BY
Customer, Year
Третье возможное решение! Это не требует никаких подзапросов! См. Этот SQL Fiddle
select
t.Customer,
t.Year,
sum(distinct t.Amount),
sum(c.Amount)
from
Transactions t
left join Claims c
on t.Customer = c.Customer
and t.Year = c.year
group by
t.Customer,
t.Year
Я думаю, что это эквивалент того, что делает source
.
import scala.sys.process._
//send file contents to sh for interpretation
val tester = "/bin/cat /path/trial.sh".#|("/bin/sh").lineStream
Конечно, все намного проще, если trial.sh
является исполняемым.
val tester = "/bin/sh -c /path/trial.sh".lineStream
Вам не нужно выставлять файл сценария, так как вам нужно сделать это только тогда, когда вы хотите включить скрипт из другого. Все, что вам нужно сделать, это запустить его:
Process("bash trial.sh").lineStream