0

複数の結果を返すクエリに問題があります。

SELECT DISTINCT gpph.id, gpph.cname, gc2a.assetfilename, gpph.alternateURL
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getpimproducthierarchy] gpph 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a
ON gpph.id=gc2a.id
WHERE gpph.subtype='Level_4' AND gpph.parentId=@ID AND gc2a.assettype='Primary Image'

結果セット

レコード 5679599 には 2 つの「プライマリ イメージ」があり、その ID に対して 2 つの結果が返されますが、最初の結果だけが必要です。現在のクエリでこれを行う方法はありますか? 複数のクエリを記述する必要がありますか?

プライマリ イメージで結果を 1 つだけに制限する方法について、何らかの指示が必要です。私は同様の質問をたくさん見てきましたが、ほとんどの場合、where 句ではなく、クエリの先頭に「distinct」を追加するというガイダンスが必要なだけです。

編集: この問題は、ユーザーがデータベース内の 1 つのレコードに 2 つのプライマリ イメージを入力することによって発生します。私のビジネス要件は、最初の結果を取ることだけを述べています。

どんな助けでも素晴らしいでしょう!

4

2 に答える 2

2

どちらを返すかの選択は任意であるため、値に対して集計を使用できます。これにはgroup by、distinct の必要性を排除する句が必要です。

SELECT gpph.id, gpph.cname, max(gc2a.assetfilename), gpph.alternateURL
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getpimproducthierarchy] gpph 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a
ON gpph.id=gc2a.id
WHERE gpph.subtype='Level_4' AND gpph.parentId=@ID AND gc2a.assettype='Primary Image'
GROUP BY gpph.id, gpph.cname, gpph.alternateURL

この例でmax(gc2a.assetfilename)は、使用すると、複数のレコードがある場合にアルファベット順で最大の値が得られます。これは理想的な選択ではありません。レコードの順序を知っているある種のタイムスタンプがより役立つ可能性があります。これは、「最初」という単語の意味がより理解できるためです。

于 2012-11-08T22:21:40.017 に答える
0

distinct を group by に置き換えます。

SELECT MAX(gpph.id), gpph.cname, gc2a.assetfilename, gpph.alternateURL
FROM [StepMirror].[dbo].[stepview_nwppck_ngn_getpimproducthierarchy] gpph 
INNER JOIN [StepMirror].[dbo].[stepview_nwppck_ngn_getclassification2assetrefs] gc2a
ON gpph.id=gc2a.id
WHERE gpph.subtype='Level_4' AND gpph.parentId=@ID AND gc2a.assettype='Primary Image'
AND gpph.id = MAX(gpph.id)
GROUP BY  gpph.cname, gc2a.assetfilename, gpph.alternateURL
于 2012-11-08T22:09:11.260 に答える