Мое требование состоит в том, чтобы получить все имена сотрудников из таблицы employees
, и если в таблице employee
нет совпадающих строк, тогда имя сотрудника должно отображаться вместе со счетчиком как 0
CREATE TABLE #EMPLOYEES
(
employeeId int,
employeename varchar(50)
)
INSERT INTO #EMPLOYEES VALUES (1,'Dinesh Alla')
INSERT INTO #EMPLOYEES VALUES (2,'ram')
INSERT INTO #EMPLOYEES VALUES (3,'Lakshmi')
INSERT INTO #EMPLOYEES VALUES (4,'sumanth')
CREATE TABLE #LOGS
(
entityID int,
EntityCode int,
employeeID int
)
INSERT INTO #LOGS VALUES (1,201,1)
INSERT INTO #LOGS VALUES (1,201,1)
INSERT INTO #LOGS VALUES (1,201,1)
INSERT INTO #LOGS VALUES (1,201,1)
INSERT INTO #LOGS VALUES (1,201,1)
SELECT
te.employeeID, employeeName,
COUNT(ISNULL(entityCode, 0)) AS caseEntryCount
FROM
#EMPLOYEES Te
LEFT JOIN
#LOGS Tee ON ISNULL(TE.employeeID,0) = ISNULL(Tee.employeeID,0) --OR entityEmployeeID IS NULL
WHERE
entityCode = 201
GROUP BY
te.employeeID, employeename, entityCode
ORDER BY
employeeID
Проверьте изображение ниже моего вывода.
Но мой ожидаемый результат будет:
employeeID employeeName caseEntry
1 Dinesh Alla 5
2 ram 0
3 Lakshmi 0
4 sumanth 0
3 ответа
Попробуй это:
SELECT te.employeeID, employeeName,
(SELECT COUNT(*) FROM #LOGS Tee
WHERE Te.employeeID = Tee.employeeID AND Tee.entityCode = 201) AS caseEntryCount
FROM #EMPLOYEES Te
ORDER BY Te.employeeID
Вы можете переписать свой запрос с помощью LEFT OUTER JOIN, используя GROUP BY, но это медленнее, чем простой запрос в основной таблице с подзапросом для подсчета в поле списка выбора
Вам не нужен ISNULL в соединении, просто присоединитесь, а затем используйте IS NOT NULL в предложении WHERE. Что-то вроде этого;
SELECT te.employeeID
,employeeName
,COUNT(entityCode) AS caseEntryCount
FROM #EMPLOYEES Te
LEFT JOIN #LOGS Tee ON TE.employeeID = Tee.employeeID --OR entityEmployeeID IS NULL
WHERE entityCode = 201
OR entityCode IS NULL
GROUP BY te.employeeID
,employeename
,entityCode
ORDER BY employeeID
Также рекомендуется использовать соответствующий псевдоним таблицы для всех полей, а не только для неоднозначных. Это сделает ваш код более понятным и легким для чтения.
Попробуй это.
SELECT e.*
, COUNT(l.entityID) AS CaseEntry
FROM #EMPLOYEES e
LEFT JOIN #LOGS l
ON l.employeeID = e.employeeId
GROUP BY e.employeeId
, e.employeename
, l.EntityCode
ORDER BY e.employeeId;
Старайтесь избегать использования ORDER BY, если порядок не имеет значения. Это повысит производительность запроса.
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.