Sql按计数加入Group

时间:2013-06-16 14:09:54

标签: 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

我有一个像Employee master这样的表,有相应的Employee名称是save,我怎么能把这个表加入Employee master table

我想出去把这个

Ecode Ename Recvd
E003   jas   24
E001   deepu  14

4 个答案:

答案 0 :(得分: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 演示。

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:1)

您的EmployeeMaster表或Transaction_tbl中必须有一个foriegn键才能执行您想要的操作。如果您这样做,这只会提供帮助

如果外键在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 

如果它在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 

我希望它有所帮助