此查询基于事务表
编写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
答案 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
我希望它有所帮助