group by
残念ながら、や などのステートメントに関する私の知識having
は非常に限られているため、お役に立てれば幸いです。
私には見解があります - ここに抜粋があります - (ここにヨーロッパ人がいる場合 - Winline/Mesonic の v021 です):
ID | Artikelbezeichnung1 | Bez2 | mesoyear
_____________________________________________________________________
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1344
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1356
1401MA70 | Marga ,Saracena grigio,1S,33,3/33,3 | Marazzi | 1356
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1344
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1356
1401MA71 | Marga ,Saracena beige,1S,33,3/33,3 | Marazzi | 1356
2401CR13 | Crista,Mahon rojo,1S,33,3/33,3 | Cristacer | 1332
2401CR13 | Crista,Mahon rojo,1S,33,3/33,3 | Cristacer | 1344
したがって、ID
は一意ではなく、 で最も高い値を持つものが必要mesoyear
です。
私の最初の解決策は次のとおりです。
Select
c015 as ID,
c003 as Artikelbezeichnung1,
c074 as Bez2,
mesoyear
from
CWLDATEN_91.dbo.v021
group by
c015
having
mesoyear = max(mesoyear)
しかし、これはまったく機能しません...
メッセージ 8121、レベル 16、状態 1、行 8
列 'CWLDATEN_91.dbo.v021.mesoyear' は、集計関数にも GROUP BY 句にも含まれていないため、HAVING 句では無効です。
したがって、ステートメントを削除しただけで、having
「より良く」なりました。
メッセージ 8120、レベル 16、状態 1、行 2
列 'CWLDATEN_91.dbo.v021.c003' は、集計関数にも GROUP BY 句にも含まれていないため、選択リストでは無効です。
そこで、「group by」に物を追加するだけでエラーを取り除こうとしました。そしてそれはうまくいきました。
Select
c015 as ID,
c003 as Artikelbezeichnung1,
c074 as Bez2,
max(mesoyear)
from
CWLDATEN_91.dbo.v021
group by
c015, c003, c074
私が欲しいものを正確に与えてくれます。
しかし、正しい選択には、約 24 の列といくつかの計算も含まれています。group by
すべての列を...に追加するだけでは問題は解決できませんか?
誰かが適切なコマンドを見つけるのを手伝ってくれませんか?
ありがとうございました!