2017-06-06 160 views
0

我試圖使用查詢的正確總和查詢我的查詢的預期結果,但是,當它檢測到相同的ID時,這些數字會不斷累加。我想按日期獲得小組。不幸的是,當我跑我的查詢它得到一個錯誤說子查詢返回多個1行子查詢在group by子句中返回多於一行 - MySQL

這裏是我的查詢:

SELECT a.DOB as `DATE`, (CASE when f.INHOUR > 12 or f.INHour = 12 Then 'PM' 
else 'AM' END) as Shift, concat(b.FIRSTNAME, ' ', b.LASTNAME) Fullname, 
a.Amount as DECLARED, SUM(c.Amount) as CALCULATED, 
a.AMOUNT as `NET OF SPECIAL SALES`, 
d.Amount as `CASH OVER SHORT`, 
a.AMOUNT as `CASH DEPOSIT`, 
(SELECT SUM(gndrevn.AMOUNT) from gndrevn where gndrevn.ID= b.ID and 
gndrevn.type = "4" group by gndrevn.DOB, gndrevn.ID) as `TRANSACTION COUNT (POS)` 
FROM gndsale a 
INNER JOIN emp b ON a.ID= b.ID 
INNER JOIN gndsale c ON b.ID= c.ID 
INNER JOIN gndsale d on b.ID = d.ID 
INNER JOIN adjtime f on a.ID= f.ID 
WHERE a.type = "22" AND c.type = "4" AND d.type = "42" and 
STR_TO_DATE(a.DOB, '%m/%d/%Y') BETWEEN '2017-05-01' AND '2017-05-31' GROUP BY DECLARED 
order by STR_TO_DATE(a.DOB, '%m/%d/%Y') 

它返回此錯誤:

enter image description here

我試圖刪除gndrevn.DOB,gndrevn.ID,這是我的結果

enter image description here

交易數POS只是增加了,因爲它檢測表相似的ID。

什麼結果,我想爲我的事務數POS是這樣的:

enter image description here

我跑這跟不同的查詢,但它也通過在select語句

這裏需要一組查詢:

SELECT ID as `EMPLOYEE`, sum(AMOUNT) as AMOUNT, DOB as DATE from gndrevn 
where ID in (select ID from gndsale) and type = "4" group by 
DOB, ID order by STR_TO_DATE(DOB, '%m/%d/%Y') 

我覺得我的團隊通過聲明來得到查詢有問題。任何人都可以幫助我呢? :(

+0

你的查詢是一個爛攤子。該錯誤信息是明確的:你的子查詢返回的記錄不止一個,這個需要修復 –

回答

1

我想你想要的是從GROUP BY取出gndrevn.DOB並在WHERE添加gndrevn.DOB = a.DOB。

+0

WOW!IT WORKED !!:D謝謝你!!!:DI沒有想到這個:(我對group by子句的想法太深了: ( –

+0

雖然深思熟慮,但我注意到我的CALCULATED列也不同步,它使用相同的ID添加記錄,但是,我想使用日期來確定它......這種解決方案有可能嗎? –

+0

您可以使用與以前相同的方法,只需相應地替換列和表名即可。 – Anton