Как выполнить команду источника BASH из scala 2.11?

Итак, первым шагом, чтобы увидеть, что происходит, является удаление СУММ и просто выберите сумму транзакции и сумму претензии. Таким образом вы можете видеть, какие данные возвращаются. Вы увидите, что соединение на 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

0
задан Arijit Choudhury 13 July 2018 в 05:41
поделиться

2 ответа

Я думаю, что это эквивалент того, что делает 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
0
ответ дан jwvh 17 August 2018 в 13:38
поделиться

Вам не нужно выставлять файл сценария, так как вам нужно сделать это только тогда, когда вы хотите включить скрипт из другого. Все, что вам нужно сделать, это запустить его:

Process("bash trial.sh").lineStream
0
ответ дан cbley 17 August 2018 в 13:38
поделиться
Другие вопросы по тегам:

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