2016-04-06 99 views
-2

我需要在存儲過程中寫一個查詢,我錯過了下面的循環部分,否則插入和選擇都是正確的,請建議完成查詢或替代建議。帶循環的小查詢?

內傳遞的參數是@日,@ sectn只有

SELECT Name FROM tblProductionEffcyDetails where [email protected] and section [email protected] 

我得到的名單(例如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(如果存在於數據庫賦一個值rther值應該不會花)

@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

看起來你可以做的是,在一個聲明中,雖然你在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 
+0

這個查詢是針對sql標準的,並且只能在mysql中運行,如果通過sql模式的完整組是**不啓用**。它在新版本的mysql中默認啓用。 – Shadow

+0

@Shadow你是說當有一個group時,mysql不允許選擇常量,或者在這種情況下是參數? – juharr

+0

@Shadow我讀到的關於'ONLY_FULL_GROUP_BY'的信息越多,我越容易相信你錯了,因爲除了不是列的參數以外,我確實擁有組中選擇的所有列,因此不受此規則約束。我也很不安,mysql實際上有一個模式,允許你選擇不在組中的列。 – juharr

0

你並不需要爲這個存儲過程,你可以完成整個事情中使用insert ... select ...查詢與聯接和SUM()單查詢:

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 [email protected] and section [email protected] 
group by wDate, Section, Name, empid 

我已經2點的假設:

  1. 你還沒有透露你想怎麼治療empid,所以我按這個字段分組。您可能需要根據您的具體要求進行更改。

  2. 你還沒有透露你想如何處理DEfficiency(它從插入查詢完全丟失,所以它有一個語法錯誤),所以我按這個字段分組。您可能需要根據您的具體要求進行更改。

更新:

由於缺失述評在更新的問題作爲@TSH/@TAT計算,就可以計算出這個字段作爲sum(Tstdmin)/sum(TAvlbmin)(更新上面的查詢)。

+0

OP將'@ eid'插入到'Empid'中,如果他們希望來自'tblProductionEffcyDetails'表或者僅僅是一個傳入存儲過程的值,並不是很清楚。 – juharr

+0

非常感謝我們幾乎接近解決方案,我已編輯的問題,使其更容易理解和清除疑慮,請建議 –

+0

更新有關效率的答案。我還不清楚你想如何使用empid。我知道你從同一個表中獲得所有其他值,但你似乎沒有在總結計算中使用它,但是你在結果表中插入了它的值。但是,您現在有足夠的信息來解決問題,所以請嘗試自己完成查詢。 – Shadow