2016-03-27 34 views
0

aşağıdaki sütunları içeren bir tablo var dökme değere bir yıldız işareti.Seç MAX değeri ve

ben bu sorguyu denedi -

SELECT Player.LastName + ' ' + LEFT(player.FirstName, 1) as PlayerName,COUNT(DISTINCT match.MatchId) AS Matches, 
COUNT(CASE WHEN BatInnings.fk_HowOut_Id != 1 THEN 1 ELSE NULL END) AS 'Innings', 
COUNT(CASE WHEN BatInnings.fk_HowOut_Id = 7 THEN 1 ELSE NULL END) AS 'Not Outs', 
SUM(BatInnings.Runs) AS 'Aggregate', 
CASE WHEN (COUNT(CASE WHEN BatInnings.fk_HowOut_Id != 1 THEN 1 ELSE NULL END) - COUNT(CASE WHEN BatInnings.fk_HowOut_Id = 7 THEN 1 ELSE NULL END)) > 0 THEN SUM(BatInnings.Runs)/(COUNT(CASE WHEN BatInnings.fk_HowOut_Id != 1 THEN 1 ELSE NULL END) - COUNT(CASE WHEN BatInnings.fk_HowOut_Id = 7 THEN 1 ELSE NULL END)) ELSE 0 END AS 'Average', 
CAST(MAX(BatInnings.Runs) AS varchar(3)) + CASE WHEN BatInnings.fk_HowOut_Id = 7 THEN '*' 
                       ELSE '' 
                       END AS 'High Score' 
FROM Match 
JOIN Innings ON Innings.fk_Match_Id = Match.MatchId 
JOIN BatInnings ON BatInnings.fk_Innings_Id = Innings.Id 
Join Player On player.Id = BatInnings.fk_Player_Id 
WHERE Player.ClubId = 1088 
group by Player.id, player.FirstName, player.LastName 
Order by PlayerName 

ve i'nin döndürülen bir hata mesajı alıyorum:

Column 'BatInnings.fk_HowOut_Id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

i doğru yöne çekebilir miyiz.

Teşekkür .. sorgunun bağlamında itibaren

+3

tam sorgu gönderebilir miyim bu sorgu ile birlikte çalışan sorgu var: Yani görüyoruz hataya neden olur seçme içinde bir toplama işlevi, dış koyar –

+1

Hata iletisi yüklendiğini ve silindiğini açıklıyor - sorguya göre bir grubun select yan tümcesinde fk_HowOut_Id kullanıyorsunuz, ancak grubun yan tümce tümcesine göre değil. –

cevap

0

Ben

(Select CAST(t.Runs as varchar(3)) + CASE WHEN t.fk_HowOut_Id = 7 Then '*' ELSE '' End FROM (SELECT TOP 1 * FROM BatInnings b WHERE b.fk_Player_Id = P.Id Order By b.Runs DESC) t) AS 'High Score' 
1

, sana seçme son öğeye içinde case deyimi etrafında bir count() unuttum düşünüyorum.

... 
MAX(BatInnings.Runs) AS varchar(3)) + CASE WHEN 
    sum(case when BatInnings.fk_HowOut_Id = 7 then 1 else 0 end)>0 
    THEN '*' ELSE ''END) AS 'High Score' 
    ... 
+0

Bunu denedim ve bu, oyuncuların toplam çalışmalarına bir vuruş ekleyerek, Batting.Runs'ın sonuna bir yıldız işareti eklemiyor gibi görünüyor. Unles açık bir şey eksik. – Blair

+0

Bu sütunun neyi temsil ettiğinden emin değilim ... Beyzbol istatistikleri hakkında hiçbir şey bilmiyorum. Ama muhtemelen 'BatInnings.fk_HowOut_Id' etrafında bir yerde bir toplama fonksiyonuna ihtiyacınız var, ama nerede olduğunu söyleyemem. Belki de sayılmalıdır (BatInnings.fk_HowOut_Id = 7)> 0 'veya belki de olması gerekir. "DAHA İYİ sayılırsa (BatInnings.fk_HowOut_Id) = 7" ... veya belki de "sayım" bir toplam olmalıdır. '. – David784

+0

Aslında kriket istatistikleri. :) Sonucun ne olması gerektiğini açıklamaya çalışacağım .. Masa BatInnings her bir meyilli vuruş istatistiklerini depolar. Her meyilli için en yüksek puanı almak istiyorum. Ama bunun üzerine, bu vuruş sırasında meyilli olmadığında sinyal vermek için bir tanımlayıcı eklemek istiyorum. Fk_HowOut_id işten çıkarmalar tablosuna yabancı bir anahtardır. Yani daha iyi bir skorlar 64 çalışırsa ve dışarıda değilse o zaman '64 *' – Blair