2009-05-12 37 views
0

私は一対のSQLサーバテーブルを持っています。SQLクエリ親子の区別

PにはIDと名前が含まれています。 PRには、id、interestrate、tiernumber、fromdate、todate、およびP.idが含まれています。 PRには、p.id/tierごとに多数の行がリストされている場合があります。 (ティアは、指定された期間内に製品が持つ可能性のある料金の一覧です。)

例:製品1段階1は2008年1月1日から1/1/2009に開始し、レートごとに6行のレートが表示されます。プロダクト1のティア2は1/2/2009などを開始します。

私はP.nameとPR.tier番号と日付を表示するビューが必要ですが、階層を表す行は1つだけにします。

これは簡単です:これは私の正確な右のデータ与え

SELECT DISTINCT P.ID, P.PRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
    PR.FROMDATE, PR.TODATE, PR.PRODUCTID 
FROM dbo.PRODUCTRATE AS PR INNER JOIN dbo.PRODUCT AS P 
    ON P.ID = PR.PRODUCTID 
ORDER BY P.ID DESC 

...しかし:これは、それが明瞭に否定うとしてPR.IDを見るために私を許可していません。

ユーザーが階層の一覧のみを表示する必要があるため、すべてのデータを表示するPR.IDを確認する必要があるため、結果セットを制限する必要があります。

アイデア?

+1

「PR.IDを参照する必要があります」とはどういう意味ですか? PR.IDでは、1行に数が多いので、1行しか表示できません。 P.ID/Tierごと、またはPR.IDごとに行があります。 –

+0

申し訳ありません - アプリケーションに固有のIDを返す必要があります。ユーザーは、製品の層のすべてを見たいと思っていて、画面上のより多くの層を選択できるようにしたいと考えています。選択した項目のティア番号を見つけて、それを使って残りのデータを取得する必要があります。ただし、アプリケーションで一意のIDがある場合にのみ、ティア番号を指定できます。 –

答えて

1
SELECT P.ID, P.ACUPRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
    PR.FROMDATE, PR.TODATE, PR.PRODUCTID, MIN(PR.ID) 
FROM dbo.PRODUCTRATE AS PR INNER JOIN dbo.PRODUCT AS P 
    ON P.ID = PR.PRODUCTID 
GROUP BY P.ID, P.ACUPRODUCTCODE, P.PRODUCTNAME, PR.TIERNO, 
    PR.FROMDATE, PR.TODATE, PR.PRODUCTID 
ORDER BY P.ID DESC 

すべきことです。 DISTINCTの代わりにGROUP BYを使用し、PR.IDの特定の値を戻すサマリー関数(MI​​N)を使用します。

+0

はいこれは特定のPR.ID値を返しますが、OPの質問から、彼が必要とする* PR.ID値(MINでない可能性があります)が明確ではありません。たぶん彼は明らかにするでしょう。 –

+0

この場合、MINはSUMよりも少し意味があると思いました。 ;-) –

+0

あなたは学者で、紳士です。ちょうどこれを試し、それはすばらしく動作します。どうもありがとうございました。 –

1

同じクエリで2つの異なることを達成したいと思うようですが、意味がありません。いずれかの製品/階層/日付情報のリストが必要な場合、または金利のリストが必要な場合。

特定のPR.IDを選択してデータを取得するには、そのルールがどのようなものであるかを判断する必要があります。

+0

トム、ありがとう。はい、私はアプリケーションによって制限されています。私がやっていることは、ユーザーにオプションを限定して、製品が5つの層を持っていることを確認できるようにすることです。彼らが歴史的な層を見ることに決めたとき、彼らは1つのオプションを選択してから、その層のすべての料金を取ります...私はアプリケーションにユニークなIDを提供して、それを返すことができます。フェッチ。 –

関連する問題