我正在尝试为我的数据库编写一个查询,但是我遇到了它需要的地方时遇到了一些问题。
我需要做什么:
在列出其他内容之前,需要查看“工作时间表”并查看4月份哪些员工工作并列出。然后需要列出这些员工工作的小时数(COUNT)
我会告诉你我把它放在一起的东西是不是很完整,因为它已经很晚了,而且我已经没有想法了:
SELECT
(cl.CommonName + '(' + cl.LegalName + ')') AS ClientName,
p.ProjectName,
(e.LastName + ', ' + e.FirstName) AS EmpName,
SUM(wh.HoursWorked) AS Hours,
br.Rate,'$'+FORMAT((Rate * SUM(HoursWorked)), '#,0.00') TotalCharges,
(con.LastName + ', ' + con.FirstName + ' - ' + con.AddrLine1 + ' ' + con.AddrLine2) AS Contact
FROM
Clients cl,
Projects p,
Employees e,
WorkHours wh,
BillingRates br,
Contacts con,
Contracts cont
WHERE
cl.ClientID = cont.ClientID
AND cont.ContractID = p.ContractID
AND e.Level = br.Level
AND e.TitleID = br.TitleID
AND e.EmpId = wh.EmpId
AND EXISTS
( SELECT * FROM WorkHours
WHERE WH_Month = 4 )
GROUP BY
cl.CommonName,
cl.LegalName
ORDER BY
ClientName,
p.ProjectName,
EmpName
这是我的架构:
结果应包括:
答案 0 :(得分:0)
尝试换掉这个:
AND EXISTS
( SELECT * FROM WorkHours
WHERE WH_Month = 4 )
有了这个:
WHERE wh.WH_Month = 4
你在查询中的内容是"如果表中有任何记录,月份= 4,请在我的结果中给我这个记录,无论它与哪个月相关"。没有任何东西可以捆绑当前的"结果到了月份,所以它将返回每条记录。
编辑:我还支持替换当前方法的旧式逗号连接,并且在您的架构中,我没有看到很多外键关系或与您选择的表有关的任何内容。 ..例如,您如何知道给定项目/合同的客户是什么?只是值得深思。