- PR -

列の内容を結合

投稿者投稿内容
ヴィニカリ
会議室デビュー日: 2006/09/26
投稿数: 5
投稿日時: 2006-09-26 17:26
はじめまして。
データベースはほぼ初心者なので、
皆さんのお知恵を拝借したいと思っております。

ACCESSを使って、

Key:Value1
A :あいう
A :かきく
B :あいう
B :さしす

というテーブルにおいて、同じKeyを持つ
Value1の値を結合させ、

Key:Value
A:あいうかきく
B:あいうさしす

というように出力させたいと考えています。
この時のSQL文をどう書いたら良いか分からず
悩んでいます。
行→列変換はそれなりに検索ヒットするものの、
同一列→結合して一つに、といったケースが
余り一般的ではないように思いますので、
どなたかにアドバイスを頂ければ幸いです。

宜しくお願い致します。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-09-26 17:32
何に使うか書いてないからわかんないんだけど、俺なら結果を取り出した後にプログラム側で加工するなぁ。
ヴィニカリ
会議室デビュー日: 2006/09/26
投稿数: 5
投稿日時: 2006-09-26 17:36
引用:

ぶさいくろうさんの書き込み (2006-09-26 17:32) より:
何に使うか書いてないからわかんないんだけど、俺なら結果を取り出した後にプログラム側で加工するなぁ。



返信有り難うございます。
もとねたはデータベースへの問い合わせ結果をCSVではき出しているのですが、一つのキーに対する項目が複数のレコードに分かれて出力されているため、これを一つのレコードにまとめて、XMLに加工する用途で考えています。
やはりプログラム書くのが賢明ですかね。SQLやるには無理があるでしょうか。
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2006-09-26 17:49
SQLの世界では「結合結果」みたいなデータ構造は好ましくないので
この手の処理はあまり得意ではありません。私も一旦データ出力してから
プログラム側で編集するアプローチがよいと思います。

ところで、データベース内のデータは順序を持ちません。
同じグループの順番はどう解決するのでしょうか?
A :あいう
A :かきく

がある場合、「あいうかきく」と「かきくあいう」の場合が考えられます。
細かい事はわかりませんが、単純に文字列比較で並べればよいのですか?
ヴィニカリ
会議室デビュー日: 2006/09/26
投稿数: 5
投稿日時: 2006-09-26 17:55
引用:

vincentさんの書き込み (2006-09-26 17:49) より:
SQLの世界では「結合結果」みたいなデータ構造は好ましくないので
この手の処理はあまり得意ではありません。私も一旦データ出力してから
プログラム側で編集するアプローチがよいと思います。

ところで、データベース内のデータは順序を持ちません。
同じグループの順番はどう解決するのでしょうか?
A :あいう
A :かきく

がある場合、「あいうかきく」と「かきくあいう」の場合が考えられます。
細かい事はわかりませんが、単純に文字列比較で並べればよいのですか?



返信ありがとうございます。
SQLの得手不得手が見えない状態でおりましたので、
こうしたアドバイスも非常に参考になります。

ところで、結合は単純に出現順を考えています。
あいう・かきくと出現すれば「あいうかきく」、
かきく・あいうと出現すれば「かきくあいう」
となれば良しと考えています。
concatで結合するようなイメージです。

かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-09-26 17:59
RDBによってはユーザ定義の集計関数が作れると思いますが、
お使いのRDBがサポートしていないのであれば、
プログラムでの加工をお勧めします。
ヴィニカリ
会議室デビュー日: 2006/09/26
投稿数: 5
投稿日時: 2006-09-27 11:55
引用:

かつのりさんの書き込み (2006-09-26 17:59) より:
RDBによってはユーザ定義の集計関数が作れると思いますが、
お使いのRDBがサポートしていないのであれば、
プログラムでの加工をお勧めします。



返信有り難うございます。
集計関数はユーザ定義出来る環境に無いので
挫折してしまいました。

ところで、データベースを良く調べてみると、
項目に対してナンバリングされていることが分かりました。
つまり、

Key:Value:No
A :あいう:1
A :かきく:2
A :さしす:3
B :あいう:1
B :かきく:2

このナンバーを使えばなんとかならないかなと
思ったりしているのですが、SQLでSELECTで
取り出す内容毎にWHERE定義を行う事は
出来ないのでしょうか。これができると、
表示結果としては、

Keyx:xのNo1のValue:xのNo2のValue....

と出来るような気がするのですが、SQLで
やるにはJOINが一般的でしょうか?
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-09-27 14:32
どう見ても普通のSQLではできないので、素直にプログラムを書いたほうが早い。
それから、

引用:

もとねたはデータベースへの問い合わせ結果をCSVではき出しているのですが、一つのキーに対する項目が複数のレコードに分かれて出力されているため、これを一つのレコードにまとめて、XMLに加工する用途で考えています。


これを読むとテーブル設計が間違っているような気がする。本来、一レコードになる
べきものが、複数のレコードに分解されてしまっているのでは?

スキルアップ/キャリアアップ(JOB@IT)