1

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すべての列を...に追加するだけでは問題は解決できませんか?

誰かが適切なコマンドを見つけるのを手伝ってくれませんか?

ありがとうございました!

4

2 に答える 2