我需要在存储过程中编写一个查询,我想念下面的循环部分,否则插入和选择是正确的,请建议完成查询或替代建议。
作为参数传入内部是@ date,@ sectn only
SELECT Name FROM tblProductionEffcyDetails where wDate=@date and section =@sectn
我获取名称列表(示例5名称)
循环1:对于我需要在下面执行的每个名称
循环2:
SELECT Tstdmin,TAvlbmin,@name=Name, @eid=Empid
FROM tblProductionEffcyDetails
WHERE (wDate = @date) AND (Section = @sectn) and Name = (1st name from the above query list)
@TSH = Tstdmin
(如果数据库中存在一个值,则不应该采用其他值)
@TAT+=TAvlbmin
将上述值插入另一个表
INSERT INTO tblDailyReport (wdate, Section, Name, Empid, TAvlT, TstdH, DEfficiency)
VALUES (@date,@sectn,@name,@eid,@TAT,@TSH,(@TSH/@TAT))
名称,Empid取自tblProductionEffcyDetails。
在loop2中,直到所有相同的名称完成,一旦完成,它将转到Loop1并完成所有名称。
tblProductionEffcyDetails有许多名称和重复的名称,所以所有都需要在循环中。最后,每个名称(不重复)和总和细节都将插入到tblDailyReport。
前端-C#Asp.Net
答案 0 :(得分:0)
虽然tblDailyReport
中的列数多于您拥有的值,但您可以在一个语句中完成所有这些操作。
INSERT INTO tblDailyReport (wdate, Section, Name, Empid, TAvlT, TstdH, DEfficiency)
SELECT
wdate,
Section,
Name,
@eid AS Empid,
SUM(Tstdmin) AS TAvlT,
SUM(TAvlbmin) AS TstdH,
<Not Sure What you want here> AS DEfficiency
FROM tblProductionEffcyDetails
WHERE wDate = @date AND Section = @sectn
GROUP BY wdate, Section, Name
答案 1 :(得分:0)
您不需要存储过程,您可以使用带有连接和sum()的insert ... select ...查询在单个查询中完成整个过程:
insert into tblDailyReport (wdate, Section, Name, Empid, TAvlT, TstdH, DEfficiency)
select wDate, Section, Name, empid, sum(TAvlbmin), sum(Tstdmin), sum(Tstdmin)/sum(TAvlbmin)
from tblProductionEffcyDetails
where wDate=@date and section =@sectn
group by wDate, Section, Name, empid
我做了两个假设:
你还没有透露你想如何对待empid,所以我按照这个字段进行分组。您可能需要根据您的具体要求进行更改。
你还没有透露你想如何处理DEfficiency(它在插入查询中完全没有,所以它有语法错误),所以我按这个字段分组。您可能需要根据您的具体要求进行更改。
更新
由于更新问题中的效率计算为@TSH/@TAT
,因此您可以将此字段计算为sum(Tstdmin)/sum(TAvlbmin)
(更新上述查询)。