2014-01-06 36 views
-5

我有三个数据表,只想显示位置和该位置的条目数。我努力创建一个sql语句来做到这一点。我正在使用MS SQL服务器。SQL中的条目总数

下面我用Photoshop来显示我的三个表,我怎么想获得最终的输出如下:

enter image description here

+0

? Id = 1?是? –

+3

你有什么尝试?为什么你没有'dbo.Entries.EmployeeID' ** FK **而不是'dbo.Entries.Name'? –

+0

@BogdanSahlean我应该使用员工ID而不是名字好主意。 – techora

回答

1

测试数据

DECLARE @Employees TABLE (ID INT, Name NVARCHAR(100), BRANCH INT) 
INSERT INTO @Employees 
VALUES (1, 'jsmith', 4),(2, 'acook', 1),(3, 'jdoe', 4) 

DECLARE @Branch TABLE (ID INT, NAME NVARCHAR(100)) 
INSERT INTO @Branch 
VALUES (1, 'New York'), (2,'California'),(3,'Illinos'),(4,'Maine') 

DECLARE @Entries TABLE (ID INT, Employee VARCHAR(100), [Date] DateTime) 
INSERT INTO @Entries 
VALUES (1, 'jsmith', '2014-01-01 20:05:00.000'),(2, 'jsmith', '2014-01-03 20:05:00.000'), 
(3, 'jdoe', '2014-01-04 20:05:00.000'),(4, 'jsmith', '2014-01-04 20:05:00.000'), 
(5, 'jdoe', '2014-01-03 20:05:00.000'),(6, 'acook', '2014-01-02 20:05:00.000') 

查询

SELECT B.NAME AS Location, ISNULL(Q.TotalEntries, 0) TotalEntries 
FROM 
(
SELECT B.NAME as Location, COUNT(*) TotalEntries 
FROM @Entries EN INNER JOIN @Employees EM 
ON EM.name = EN.employee 
INNER JOIN @Branch B 
ON EM.branch = B.id 
GROUP BY b.name 
) Q RIGHT JOIN @Branch B 
ON Q.Location = B.NAME 

结果集

╔════════════╦══════════════╗ 
║ Location ║ TotalEntries ║ 
╠════════════╬══════════════╣ 
║ New York ║   1 ║ 
║ California ║   0 ║ 
║ Illinos ║   0 ║ 
║ Maine  ║   5 ║ 
╚════════════╩══════════════╝ 
要算到绑定纽约项的行
0
SELECT B.Name AS [Location], 
     COUNT(*) 
FROM Entries AS E 
JOIN Branch AS B 
    ON B.Id = E.Id 
GROUP BY B.Name 
ORDER BY B.Name 
2
SELECT b.Name,count(n.employee) 
FROM Branch b 
LEFT JOIN Employee e ON e.branch=b.id 
LEFT JOIN Entries n ON n.employee=e.name 
GROUP BY b.Name 
0

选择b.branch,COUNT(*)来自分支机构b在e.branch上加入员工e.branch = b.branch在s.employee = e.name分组中加入分支机构b.branch

0
select b.name 'location', isnull(count(e.branch), 0) as count_total 
from branch b 
left join employee e on e.branch = b.id 
left join entries en on en.employee = e.name 
group by b.name