Как разделить поле при использовании объединения? - PullRequest
2 голосов
/ 16 июля 2010

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

SELECT exp_cat.cat_name, SUM(exp_cheque.exp_amount) AS Cheque
FROM exp_cat INNER JOIN exp_cheque ON exp_cat.ID = exp_cheque.exp_cat_id
GROUP BY exp_cat.cat_name;
UNION
 SELECT exp_cat.cat_name, SUM(exp_cash.exp_amount) As Cash
FROM exp_cat INNER JOIN exp_cash ON exp_cat.ID = exp_cash.exp_cat_id
GROUP BY exp_cat.cat_name;

Пожалуйста, используйте эту ссылку, чтобы понять структуру каждой таблицы как объединить 2 разных таблицы?

Ответы [ 4 ]

1 голос
/ 16 июля 2010
Select cat_name, sum(cash), sum(cheque) from

(SELECT exp_cat.cat_name, SUM(exp_cheque.exp_amount) AS Cheque,null as cash
FROM exp_cat INNER JOIN exp_cheque ON exp_cat.ID = exp_cheque.exp_cat_id;
UNION
 SELECT exp_cat.cat_name, SUM(exp_cash.exp_amount) As Cash, null as cheque
FROM exp_cat INNER JOIN exp_cash ON exp_cat.ID = exp_cash.exp_cat_id;) 
group by cat_name

Сейчас не перед IDE, поэтому у меня может быть синтаксическая ошибка, но это общая идея.

  1. Добавить значение заглушки для наличных в базовый запрос, возвращающий проверкуи значение заглушки для проверки на базовый запрос, возвращающий деньги.
  2. Добавить внешний запрос, который суммирует денежные средства, чеки и группы по имени_каталога.
  3. (необязательно) Можно также удалить группировку из базовых запросов, поскольку это будет выполняться во внешнем запросе, нодолжен вернуть то же самое, делаете ли вы это или нет.
1 голос
/ 16 июля 2010
Select exp_cat.cat_name
    , (Select Sum(c1.exp_amount)
        From exp_cheque As c1
            Inner Join exp_cat As c2
                On c2.Id = c1.exp_cat_id
        Where c2.cat_name = exp_cat.cat_name) As cheque
    , (Select Sum(c1.exp_amount)
        From exp_cash As c1
            Inner Join exp_cat As c2
                On c2.Id = c1.exp_cat_id
        Where c2.cat_name = exp_cat.cat_name) As cash
From exp_cat
Where exp_cat.cat_name Is Not Null
Group By exp_cat.cat_name

Если для exp_cat.cat_name существует уникальное ограничение, вы можете исключить предложение Group By.

Учитывая, что это Access, в долгосрочной перспективе может быть более эффективно создать два сохраненных запроса на наличные деньги и чек, сгруппированных по exp_cat.cat_name. Тогда вы могли бы написать что-то вроде:

Select exp_cat.cat_name
    , Sum( cheque.Total ) As chequeTotal
    , Sum( cash.Total ) As cashTotal
    , Sum( cheque.Total ) + Sum( cash.Total ) As ChequeAndCashTotal
From exp_cat
    Left Join chequeBycat_name As cheque
        On cheque.exp_cat.cat_name = exp_cat.cat_name
    Left Join cashBycat_name As cash
        On cash.exp_cat.cat_name = exp_cat.cat_name
Where exp_cat.cat_name Is Not Null
Group By exp_cat.cat_name

Каждый из двух запросов будет выглядеть так:

Select exp_cat.cat_name, Sum(exp_cheque.exp_amount) As Total
From exp_cat
    Inner Join exp_cheque
        On exp_cheque.exp_cat_id = exp_cat.Id
Where exp_cat.cat_name Is Not Null
Group By exp_cat.cat_name
0 голосов
/ 16 июля 2010

Если вы хотите получить итоги для наличных и чека, возвращенного в той же строке для того же имени кошки, попробуйте что-то вроде этого:

SELECT cat_name, sum(Cheque), sum(Cash)
(SELECT exp_cat.cat_name, exp_cheque.exp_amount AS Cheque, 0 as cash,
 FROM exp_cat INNER JOIN exp_cheque ON exp_cat.ID = exp_cheque.exp_cat_id
 UNION ALL
 SELECT exp_cat.cat_name, 0 as Cheque, exp_cash.exp_amount As Cash
 FROM exp_cat INNER JOIN exp_cash ON exp_cat.ID = exp_cash.exp_cat_id) sq
GROUP BY cat_name;
0 голосов
/ 16 июля 2010

Я не уверен, что понимаю, что вы имеете в виду, но если вы хотите получить результаты в разных столбцах, это может сработать:

SELECT exp_cat.cat_name, SUM(exp_cheque.exp_amount) AS Cheque, null as Cash
FROM exp_cat INNER JOIN exp_cheque ON exp_cat.ID = exp_cheque.exp_cat_id
GROUP BY exp_cat.cat_name;
UNION
SELECT exp_cat.cat_name, null as Checque, SUM(exp_cash.exp_amount) As Cash
FROM exp_cat INNER JOIN exp_cash ON exp_cat.ID = exp_cash.exp_cat_id
GROUP BY exp_cat.cat_name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...