#sql
#sql
Вопрос:
Я даже не уверен, как это спросить. Итак, вот так. У меня есть две таблицы, к которым я присоединяюсь, и мне нужно достаточно просто суммировать один столбец данных, но данные, которые необходимо суммировать, зависят от определенного символа, связанного с тем же номером задания из другой таблицы.
Table1
JobNumber CostType Amount
1 A 10
1 B 20
1 C 50
1 C 50
3 C 75
Table 2
JobNumber Status Value
1 A 100
2 I 50
3 A 75
Итак, некоторые задания будут содержать несколько строк для CostType ‘C’. Я пытаюсь отобразить все JobNumber s с общим количеством любых сумм для CostType C, НО только для заданий, которые имеют статус ‘A’. Вот мой запрос до сих пор:
SELECT Table1.JobNumber
,Table1.Amount
,Table2.Value
FROM DB.Table1, DB.Table2
WHERE Table1.JobNumber = Table2.JobNumber and Table1.CostType = 'C' and Table2.Status = 'A'
GROUP BY Table1.JobNumber, Table1.Amount, Table2.Value
ORDER BY Table1.JobNumber ASC
Он выдает мне список номеров заданий, их сумм и стоимости контракта, и только для типа затрат «C» и со статусом «A». Но каждая отдельная сумма типа затрат ‘C’ имеет свою собственную строку. Есть ли способ объединить их и отобразить общую сумму вместе со значением для каждого JobNumber, например, так?
JobNumber CostTypeCTotal Value
1 100 100
3 75 75
Комментарии:
1. Пометьте свой вопрос базой данных, которую вы используете.
Ответ №1:
Хммм … попробуйте выполнить агрегирование table1
перед объединением таблиц:
SELECT t2.JobNumber, t1.c_Amount, t2.Value
FROM DB.Table2 t2
(SELECT JobNumber,
SUM(CASE WHEN CostType = 'C' THEN amount END) as c_amount
FROM DB.Table1 t1
GROUP BY JobNumber
HAVING SUM(CASE WHEN CostType = 'A' THEN 1 ELSE 0 END) > 0
) t1 JOIN
ON t1.JobNumber = t2.JobNumber;
Примечание: Научитесь использовать правильный, явный, стандартный, читаемый JOIN
синтаксис. Никогда не используйте запятые в FROM
предложении. Такое использование ,
является архаичным синтаксисом, который устарел с 1990-х годов.
Комментарии:
1. Спасибо за совет. Я не знаю, где я узнал такой древний синтаксис. Что касается вашего ответа, я должен спросить, где мне нужно поменять местами мои фактические имена баз данных? Это каждый экземпляр t1 / t2 и т.д. или только в предложении from ?
2. @GenericITUnprofessional .
t1
, , иt2
являются псевдонимами таблиц. Имена таблиц, которые вы указали в своем запросе, — этоdb.table2
иdb.table1
. Это будут имена, которые вы используете.3. Я думал, что это так. При выполнении запроса я получаю две ошибки: сообщение 156, уровень 15, состояние 1, строка 3 Неправильный синтаксис рядом с ключевым словом ‘SELECT’ Сообщение 102, уровень 15, состояние 1, строка 8 Неправильный синтаксис рядом с ‘)’