0

特定の値に対して複数の行を含むテーブルがあります。テーブル構造は次のとおりです。

NAME,NUMBER,STATUS,DESC,START_DATE,END_DATE
A,3,X,DetailsOfX,13-10-15,13-10-15
A,2,Y,DetailsOfY,13-10-15,13-10-15
A,2,Z,DetailsOfZ,13-10-15,13-10-15
A,1,X,DetailsOfX,12-10-15,12-10-15

私が必要とする出力はすなわち

A,3,X,DetailsOfX,13-10-15,13-10-15
A,2,Y,DetailsOfY-DetailsofZ,13-10-15,13-10-15
A,1,X,DetailsOfX,12-10-15,12-10-15

したがって、基本的には、両方の行の列のデータを含むテーブルから 2 つ以上の行の 1 つを選択したいと考えています (上記の太字)。JOIN を使用して試した以下のクエリは、4 行を返します。

SELECT A.NAME,A.NUMBER,B.STATUS,A.DESC||"-"||B.DESC,A.START_DATE,A.END_DATE
FROM TABLE A
JOIN (SELECT NUMBER,STATUS,DESC,START_DATE,END_DATE FROM TABLE WHERE NAME='A') B
ON A.NAME=B.NAME AND
A.NUMBER=B.NUMBER

誰かがうまくいくクエリを手伝ってくれませんか。

ありがとう

4

2 に答える 2

1

IBM i 7.1 (以前は OS/400 として知られていた) を使用している場合は、 階層クエリXML 関数という 2 つのトリックを使用してこれを行うことができます。

説明をマージするために DB2 for i でこれを行う方法を説明しているQ: SQL concatenate strings の下にある私のチュートリアルを参照してください。

GROUP BY行を 1 つに結合するための任意のフィールド。ただし、他のすべての列は集計関数の結果である必要があります。たとえば、名前、番号ごとに 1 つの行が必要で、Status、StartDate、EndDate にさまざまな値がある場合は、次のように指定する必要がありますmin(Status), min(StartDate), max(EndDate)。最小ステータス コードは、実際に報告したいものですか?

OS がバージョン 6.1 の場合、従来の再帰クエリ(またはv5r4 の下)を引き続き使用できる場合がありますが、説明を連結するために追加の CTE (または 2 つ?) が必要になる場合があります。

于 2013-10-15T23:13:38.507 に答える