Я хочу подсчитать количество записей в базе данных из более чем двух таблиц, которые объединены.Исключить повторяющиеся строки в результате запроса
Например, у меня есть такой стол.
table
jobd + name
1 | jobA
2 | jobB
tableA
imgeid + orderid + jobid
1 | 1 | 1
2 | 2 | 1
3 | 3 | 1
4 | 4 | 1 (this order is not yet started)
tableB
taskid + orderid + task + status
1 | 1 | 1 | UPDATED
2 | 1 | 1 | UPDATED
3 | 1 | 1 | COMPLETED
4 | 2 | 2 | SAVED
5 | 3 | 3 | COMPLETED
Моя проблема в том, что, когда я рассчитывать базу по статусу (@ TableB) мои результаты запроса как ОБНОВЛЕНО, который имеет тот же OrderID.
Это мой пример запроса, который тот же самый с тем, который я работаю.
SELECT t.name
COUNT(CASE WHEN tb.task = 1 AND tb.status <> 'COMPLETED' THEN tb.status ELSE NULL END) inprogress,
COUNT(CASE WHEN tb.task = 1 AND tb.status = 'COMPLETED' THEN tb.status ELSE NULL END) completed
FROM tableA ta
LEFT JOIN tableB tb
ON tb.orderid = ta.orderid
LEFT JOIN table t
ON t.jobid = ta.jobid
GROUP BY t.jobid;
Мои результаты что-то вроде
name + inprogress + completed
jobA | 2 | 1
В INPROGRESS результаты должны быть только 1, поскольку она имеет тот же OrderID. Причина, по которой она имеет два ОБНОВЛЕНИЯ, потому что эта таблица ИСТОРИЧЕСКАЯ. Я не знаю, как получить отдельный заказ в таблице Б, так что это приведет только к 1.
Главное, что я могу подсчитать общие заказы, статус которых выполняется, завершен и не запущен на задание.
Надеюсь, мой вопрос ясен. Если у вас есть другой способ, сообщите мне. Спасибо
не могли бы вы использовать граф различны? Вот ссылка, см. Ближе к нижней части страницы, она будет указывать только уникальное поле: http://www.w3schools.com/sql/sql_func_count.asp – Node17
Я уже думаю об этом. Но я не знаю, как я могу подать заявку с моим текущим COUNT (CASE ......)) Если это будет похоже на этот COUNT (DISTINCT (что для этого нужно сделать, я все еще могу использовать свой CASE или где я должен поместить DISTINCT в мой запрос. Спасибо – ace
SELECT t.name COUNT (DISTINCT CASE КОГДА tb.task = 1 И tb.status <> 'COMPLETED' THEN tb.status ELSE NULL END) inprogress, COUNT (DISTINCT CASE КОГДА tb.task = 1 И tb.status = 'COMPLETED' THEN tb.status ELSE NULL END) завершено – Node17