SQL Server查询表达式

时间:2014-08-15 07:07:27

标签: sql sql-server

我正在尝试为我的数据库编写一个查询,但是我遇到了它需要的地方时遇到了一些问题。

我需要做什么:

在列出其他内容之前,需要查看“工作时间表”并查看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

这是我的架构:

My Schema

结果应包括:

  • 客户名称
  • 合同名称
  • 项目从当月第一天到当月最后一天记录项目时间的员工
  • 每个员工在该月记录的总小时数
  • 员工费率
  • 每位员工的总费用(即员工费率x员工工作小时数)
  • 结算联系人 - 每份合约的[名称,地址]

1 个答案:

答案 0 :(得分:0)

尝试换掉这个:

AND EXISTS 
( SELECT * FROM WorkHours
    WHERE WH_Month = 4 )

有了这个:

WHERE wh.WH_Month = 4

你在查询中的内容是"如果表中有任何记录,月份= 4,请在我的结果中给我这个记录,无论它与哪个月相关"。没有任何东西可以捆绑当前的"结果到了月份,所以它将返回每条记录。

编辑:我还支持替换当前方法的旧式逗号连接,并且在您的架构中,我没有看到很多外键关系或与您选择的表有关的任何内容。 ..例如,您如何知道给定项目/合同的客户是什么?只是值得深思。