我有三个数据表,只想显示位置和该位置的条目数。我努力创建一个sql语句来做到这一点。我正在使用MS SQL服务器。SQL中的条目总数
下面我用Photoshop来显示我的三个表,我怎么想获得最终的输出如下:
我有三个数据表,只想显示位置和该位置的条目数。我努力创建一个sql语句来做到这一点。我正在使用MS SQL服务器。SQL中的条目总数
下面我用Photoshop来显示我的三个表,我怎么想获得最终的输出如下:
测试数据
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 ║
╚════════════╩══════════════╝
要算到绑定纽约项的行
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
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
选择b.branch,COUNT(*)来自分支机构b在e.branch上加入员工e.branch = b.branch在s.employee = e.name分组中加入分支机构b.branch
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
? Id = 1?是? –
你有什么尝试?为什么你没有'dbo.Entries.EmployeeID' ** FK **而不是'dbo.Entries.Name'? –
@BogdanSahlean我应该使用员工ID而不是名字好主意。 – techora