循环小问题?

时间:2016-04-06 17:37:22

标签: c# mysql visual-studio loops

我需要在存储过程中编写一个查询,我想念下面的循环部分,否则插入和选择是正确的,请建议完成查询或替代建议。

作为参数传入内部是@ 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

2 个答案:

答案 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

我做了两个假设:

  1. 你还没有透露你想如何对待empid,所以我按照这个字段进行分组。您可能需要根据您的具体要求进行更改。

  2. 你还没有透露你想如何处理DEfficiency(它在插入查询中完全没有,所以它有语法错误),所以我按这个字段分组。您可能需要根据您的具体要求进行更改。

  3. 更新

    由于更新问题中的效率计算为@TSH/@TAT,因此您可以将此字段计算为sum(Tstdmin)/sum(TAvlbmin)(更新上述查询)。