この人頭いいなと思ったエピソード

得意先マスタと製品マスタがあり得意先コードで等価結合した場合
結果Aのようになると思いますが、結果Bのような結果を得たい場合は、
どのようにSQLを書けばいいのでしょうか?

DBはIBM DB2 V7ですが、postgresql 8.4での書き方も
ご存知の方宜しくお願いします。

結果A
+----+-------+----+
|列 1 | 列 2   | 列 3 |
+----+-------+----+
| A社 | A製品1 | A@1 |
| A社 | A製品2 | A@2 |
| A社 | A製品3 | A@3 |
| B社 | B製品1 | B@1 |
| B社 | B製品2 | B@2 |
| B社 | B製品3 | B@3 |
+-----+--------+--+

結果B
+----+-------+----+
|列 1 | 列 2   | 列 3 |
+----+-------+----+
| A社 | A製品1 | A@1 |
|    | A製品2 | A@2 |
|    | A製品3 | A@3 |
| B社 | B製品1 | B@1 |
|    | B製品2 | B@2 |
|    | B製品3 | B@3 |
+-----+--------+--+

A 回答 (2件)

ウィンドウ関数の lag() を使えばお望みの結果が得られます。



-- tblは得意先マスタと製品マスタの結合結果として
SELECT
CASE 列1 WHEN lag(列1, 1) OVER (ORDER BY 列1, 列2) THEN NULL ELSE 列1 END,
列2, 列3 FROM tbl;

列1 | 列2 | 列3
-----+--------+-----
A社 | A製品1 | A@1
| A製品2 | A@2
| A製品3 | A@3
B社 | B製品1 | B@1
| B製品2 | B@2
| B製品3 | B@3

参考URL:http://www.postgresql.jp/document/current/html/f …
    • good
    • 0

こんにちは。



同じ会社名であれば、2行目以降非表示なり省略なりしたいと言うことでしょうか?
SQL文でそれを行うのは、おそらく無理だと思います。

画面表示の際なり、帳票印刷の際なり、その部分を加工してあげる必要があるのではないかと。


とか言いながら、過去の知識しか持ち合わせてないので、今はできるのかも知れませんけど。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


おすすめ情報