2015-07-06 2 views
1

Я пытаюсь создать SQL-запрос, который отображает некоторую информацию из разных таблиц. Но я получаю ошибку. Subquery возвращает более 1 строки SQL. Я хочу, чтобы он отображал несколько строк.Подзапрос возвращает более 1 строки в моем SQL-запросе

SELECT c.Name, 
     jn.ID, 
     jn.ActualWeight as GrossWt, 
     jn.JobNo, 
     COUNT(distinct jn.JobNo) as Jobs, 
     COUNT(distinct jd.JobID) as Dbriefs, 
     COUNT(distinct jn.OutTurn) as Outturns, 
     (select Status from jobstat where CompanyID = jn.CompanyID AND Status = "DEL") as Delivery 
FROM job_new jn 
LEFT JOIN customer c ON jn.CompanyID = c.Company_ID 
LEFT JOIN job_debriefs jd ON jn.JobNo = jd.JobID 
LEFT JOIN jobstat js ON jn.CompanyID = js.CompanyID 
WHERE jn.CompanyID = 36 

Я попытался добавить GROUP BY и ORDER BY, но это тоже не работает. Если я удалю выбора государства .... строка отображает только одну строку, когда она должна быть отображением более ста

+0

У вас есть одна строка за раз с оператором select, так как она обозначает одну запись. У вас не может быть многократной доставки с отдельными значениями «Задания», «Даблики», «Выходы». Вам придется изменить свою логику на что-то еще или использовать Joins и т. Д., Если это возможно. –

ответ

0

Вам нужен group by:

SELECT c.Name, jn.ID, jn.ActualWeight as GrossWt, jn.JobNo, 
     COUNT(distinct jn.JobNo) as Jobs, 
     COUNT(distinct jd.JobID) as Dbriefs, 
     COUNT(distinct jn.OutTurn) as Outturns, 
     jobstat 
FROM job_new jn LEFT JOIN 
    customer c 
    ON jn.CompanyID = c.Company_ID LEFT JOIN 
    job_debriefs jd 
    ON jn.JobNo = jd.JobID LEFT JOIN 
    jobstat js 
    ON jn.CompanyID = js.CompanyID 
WHERE jn.CompanyID = 36 
GROUP BY c.Name, jn.ID, jn.ActualWeight as GrossWt, jn.JobNo, js.status 

Я не уверен, что подзапрос должен так что я догадываюсь относительно js.status.

Проблема с вашим исходным запросом заключается в использовании COUNT() в SELECT. Это превращает запрос в запрос агрегации. Без GROUP BY возвращается ровно одна строка. В большинстве других баз данных вы обычно получаете ошибку.

+0

Хорошо, я добавил GROUP BY, но он все еще показывает только 1 строку. И он по-прежнему отображает только одну строку, даже без линий COUNT – user123456789

+0

@ user123456789. , , Это предполагает, что только одна строка соответствует условиям. –

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