2011-02-08 2 views
0

Я хочу подсчитать количество записей в базе данных из более чем двух таблиц, которые объединены.Исключить повторяющиеся строки в результате запроса

Например, у меня есть такой стол.

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.

Главное, что я могу подсчитать общие заказы, статус которых выполняется, завершен и не запущен на задание.

Надеюсь, мой вопрос ясен. Если у вас есть другой способ, сообщите мне. Спасибо

+0

не могли бы вы использовать граф различны? Вот ссылка, см. Ближе к нижней части страницы, она будет указывать только уникальное поле: http://www.w3schools.com/sql/sql_func_count.asp – Node17

+0

Я уже думаю об этом. Но я не знаю, как я могу подать заявку с моим текущим COUNT (CASE ......)) Если это будет похоже на этот COUNT (DISTINCT (что для этого нужно сделать, я все еще могу использовать свой CASE или где я должен поместить DISTINCT в мой запрос. Спасибо – ace

+0

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

ответ

0

Разве вы не можете использовать граф? Вот ссылка, см ближе к нижней части страницы, это будет только единственное поле указывается: w3schools.com/sql/sql_func_count.asp

 
SELECT t.name 
COUNT(DISTINCT tb.orderid CASE WHEN tb.task = 1 AND tb.status 'COMPLETED' THEN tb.status 
ELSE NULL END) inprogress, 
COUNT(DISTINCT tb.orderid CASE WHEN tb.task = 1 AND tb.status = 'COMPLETED' THEN tb.status 
ELSE NULL END) completed 
+1

Спасибо за информацию. Я узнаю, что отсутствует в моем коде. Я не включил имя столбца таблицы. У него есть что-то похожее на это COUNT (DISTINCT tb.orderid, CASE КОГДА tb.task = 1 И tb.status 'COMPLETED' THEN tb.status ELSE NULL END) inprogress – ace

+0

Прохладный, я поправлю его, если кому-нибудь еще понадобится его для справки. – Node17

+0

Да! .. но теперь у меня возникает другая проблема ... Я не должен включать orderid, у которых есть ЗАВЕРШЕННЫЙ статус в процессе. Я думаю, это более проблематично, если у вас есть идея, пожалуйста, опубликуйте его или мне нужно будет опубликовать новый вопрос. В любом случае, спасибо.. – ace

Смежные вопросы