2013-06-16 33 views
7

Truy vấn này được viết dựa trên bảng giao dịchSQL Gai nhập nhóm bằng cách đếm

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 

trong khi thực hiện truy vấn này tôi đang được nhận ra đặt như thế này

Ecode  recvd 
E003   24 
E001   2 

Tôi có một bảng giống như nhân viên thạc sĩ, có Tên nhân viên tương ứng được lưu, cách tôi có thể tham gia bảng này với bảng tổng thể của nhân viên

Tôi muốn đặt ra ý thích này

Ecode Ename Recvd 
E003 jas 24 
E001 deepu 14 

Trả lời

7

Hãy thử

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 

hoặc chỉ

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 

Đây là SQLFiddle demo.

+0

này là làm việc tốt ,, Cảm ơn s Rất nhiều –

+1

@ user2432269 Bạn được chào đón :) Nếu đó là những gì bạn đang tìm kiếm xin vui lòng, hãy xem xét để ** [chấp nhận] (http://meta.stackexchange.com/questions/5234/how-does-accepting- một câu trả lời-công việc) ** câu trả lời. – peterm

+0

Trong truy vấn đầu tiên, nếu bạn có các giao dịch với 'Ecode' không có sẵn trong bảng' Employee', bạn có thể thay đổi tham gia thành 'RIGHT JOIN' và chọn' q.Ecode' thay vì 'e.Ecode' trong lựa chọn bên ngoài. Điều này sẽ làm cho mã và số lượng hiển thị, mặc dù tên không có sẵn. – 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

Tôi nghĩ rằng bạn có thể sử dụng một truy vấn 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 

Đơn giản chỉ cần thay đổi ON a.id = b.id với bạn cột thực tế cái tên đó có mối quan hệ và bảng tên.

1

Cần phải có một phím foriegn trong Bảng EmployeeMaster hoặc Transaction_tbl để làm những gì bạn muốn, Nếu bạn làm điều này sẽ chỉ giúp

Nếu khóa ngoại là trong 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 

Nếu nó là trong 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 

tôi hy vọng nó giúp

Các vấn đề liên quan