2013-06-16 2 views
7

Этот запрос написан на основе таблицыSqL Присоединиться к группе по количеству

SELECT Ecode,COUNT(*) AS recvd 
FROM Transaction_tbl 
WHERE Locid=5 AND dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
GROUP BY Ecode 
ORDER BY Ecode DESC 

транзакции во время выполнения этого запроса я получаю из положить, как этот

Ecode  recvd 
E003   24 
E001   2 

У меня есть еще одна таблица, как мастер Сотрудника, там соответствующее имя сотрудника сохраняется, как я могу присоединиться к этой таблице к таблице работника

Я хочу выбраться положил это

Ecode Ename Recvd 
E003 jas 24 
E001 deepu 14 

ответ

7

Попробуйте

SELECT e.Ecode, e.Ename, q.recvd 
    FROM Employee e JOIN 
(
    SELECT Ecode,COUNT(*) Recvd 
     FROM Transaction_tbl 
    WHERE Locid = 5 
     AND dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
    GROUP BY Ecode 
) q ON e.Ecode = q.Ecode 
ORDER BY e.Ecode DESC 

или просто

SELECT e.Ecode, e.Ename, COUNT(*) Recvd 
    FROM Employee e JOIN Transaction_tbl t 
    ON e.Ecode = t.Ecode 
WHERE Locid = 5 
    AND dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
GROUP BY e.Ecode DESC 

Вот SQLFiddle демо.

+0

Это работается Fine ,, Спасибо s A lot –

+1

@ user2432269 Добро пожаловать :) Если бы это было то, что вы искали, рассмотрите ** [accept] (http://meta.stackexchange.com/questions/5234/how-does-accepting- ответ-работа) ** ответ. – peterm

+0

В первом запросе, если у вас есть транзакции с 'Ecode', недоступные в таблице' Employee', вы можете изменить объединение на 'RIGHT JOIN' и выбрать' q.Ecode' вместо 'e.Ecode' в внешний выбор. Это приведет к появлению кода и подсчета, даже если имя не доступно. – Vegar

1
SELECT t.Ecode, e.name, COUNT(*) AS recvd 
FROM Transaction_tbl 
JOIN Employee e ON e.Ecode = t.Ecode 
WHERE Locid=5 
AND dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
GROUP BY t.Ecode, e.name 
ORDER BY Ecode DESC 
2

Я думаю, что вы можете использовать INNER JOIN запрос

SELECT a.Ecode,COUNT(a.*) AS recvd, b.name 
FROM Transaction_tbl a 
INNER JOIN employee_master b 
ON a.id = b.id 
WHERE a.Locid=5 
AND a.dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
GROUP BY a.Ecode 
ORDER BY a.Ecode DESC 

Просто измените ON a.id = b.id с вами имя фактических столбцов, которые имеют имя отношения и таблицы.

1

Там должен быть foriegn ключ в вашем EmployeeMaster таблице или Transaction_tbl делать то, что вы хотите, если вы сделаете это только поможет

Если внешний ключ находится в EmployeeMaster

SELECT t.Ecode,e.Ename,t.COUNT(*) AS recvd 
    FROM Transaction_tbl as t 
    INNER JOIN EmployeeMaster as e 
    ON t.Ecode = e.Ecode 
    WHERE t.Locid=5 AND dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
    GROUP BY t.Ecode 
    ORDER BY t.Ecode DESC 

If он находится в Transaction_tbl

SELECT t.Ecode,e.Ename,t.COUNT(*) AS recvd 
    FROM Transaction_tbl as t 
    INNER JOIN EmployeeMaster as e 
    ON t.EmasterForeignKey = e.EmasterPrimaryKey 
    WHERE t.Locid=5 AND dtime BETWEEN '5/1/2013 00:00:00' AND '6/10/2013 23:59:59' 
    GROUP BY t.Ecode 
    ORDER BY t.Ecode DESC 

Я надеюсь, что это помогает

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