Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 另一个表中的列计算_Sql_Sql Server - Fatal编程技术网

Sql 另一个表中的列计算

Sql 另一个表中的列计算,sql,sql-server,Sql,Sql Server,我有两张桌子。第一个是人力资源。员工a另一个是项目详情。时间卡b 我希望自动计算ProjectDetailsStimeCards上的TotalCost列,即TotalCost=计费小时数b*计费日期a。它们可以与员工ID连接。但我无法将其转换为表格格式。 下表所示 Create table HumanResources.Employees ( Employee_ID int primary key identity (99, 11), First_Name char (20) not null,

我有两张桌子。第一个是人力资源。员工a另一个是项目详情。时间卡b 我希望自动计算ProjectDetailsStimeCards上的TotalCost列,即TotalCost=计费小时数b*计费日期a。它们可以与员工ID连接。但我无法将其转换为表格格式。 下表所示

Create table HumanResources.Employees (
Employee_ID int primary key identity (99, 11),
First_Name char (20) not null,
Phone_Number varchar (30) not null
CONSTRAINT chk_Phone_Number CHECK (Phone_Number like '[0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9]'),
Title char (35),  
Billing_Rate int constraint chk_Billing_Rate check (Billing_Rate > '0')
); -- would be uses to multiply billing hours

create table ProjectDetails.TimeCards(
Time_Card_ID int identity (55,15) primary key,
Employee_ID int foreign key references HumanResources.Employees(Employee_ID), -- references primary key on the human_resources table
Date_Issued date,
Days_Worked int constraint chk_Days_Worked check(Days_Worked > '0'),
Project_ID int foreign key references ProjectDetails.Projects(Project_ID), -- foreign key reference
Billable_hours int constraint chk_Billable_Hours check (Billable_Hours > '0'),-- would be used to multiply billing rate
Total_Cost money, -- should automatically take TotalCost=Billable Hours b * BillingRate a
Work_Code_ID int foreign key references ProjectDetails.WorkCodes(Work_Code_ID)
);-- references primary key on another table
创建视图HumanResources.vEmployeeData 像 从第一个表中选择e.EmployeeID、e.Date\u Issued、e.Days\u Worked、e.Project\u ID、e.Billable\u Hours、e.Work\u Code\u ID-查看 来自人力资源部。员工e加入项目详情。时间卡d
在e.Employee_ID=d.Employee_ID上-我创建的视图

您可以通过定义类似这样的函数来实现这一点

CREATE FUNCTION GetValue(@billablehours INT, @empid INT)
RETURNS INT
AS 
   SELECT @billablehours * e.Billing_Rate 
   FROM HumanResources.Employees e
   WHERE e.Employee_ID = @empid
然后创建一个计算列

ALTER TABLE ProjectDetails.TimeCards
   ADD Total_Cost AS GetValue(Billable_hours, Employee_ID)

请花点时间整理你的问题;最后几个用户花了时间为您这样做。如果你能很好地编排问题的格式,用户会更好地接受你的问题。最后几个问题似乎都有关联。请你自己演示一下解决这个问题的方法好吗?Stack Overflow不是一个免费的咨询网站,所以请不要将其视为一个。试着自己解决问题,展示你的尝试。正如我在你的另一个问题中所说,我建议在这里使用视图。不能基于其他表计算列。感谢您在问题中包含表DDL。请添加您尝试的查询。@谢谢。我在这里还是比较新的,可以说我还在学习诀窍。是的,它们都是相关的,因为这是我从一份实践文件中学到的。现在就分享我的代码视图有什么问题?另外,请将您的SQL设置为代码,以便我们可以阅读。谢谢。关键字“SELECT”附近的语法不正确。很抱歉打扰你,但这是我的错误,似乎有点不对劲。我在as旁边添加了begin。但是它现在在@empid旁边说了不正确的语法,这是因为它是一个标量函数,但它试图像表值函数一样工作,@shayoluwahhowever这个解决方案有效,它可能会有性能问题。只是要知道@Shayooluwah,我的意思是在计算列中使用函数会导致性能损失。如果数据集很小,不要担心,但如果数据量或用户并发性很高,则可能会出现性能问题