2017-07-28 16 views
0

私はデータベース内の値を結合しようとしています。そのため、ソフトウェア開発者ではないが解決策を考えることができない方にとっては簡単です。データベースの外観の例を以下に示します。技術者が都市名のように会社の既存の値を変更すると、以下のような3つのエントリが作成されます。特定の値を持つ行を結合して連結します

私がしようとしているのは、"{user} updated {old city} to {new city}"のようなものに連結することです。私は、 "新しい値"フラグを持つ行の説明と呼ばれる新しい列に配置したいが、多くの異なるフラグが存在するため "古い値"または "新しい値"を持たない行には触れたくない変更の種類に使用される可能性があります。私はこのような行をどのように組み合わせるかについて本当に分かりません。

"num"ラベルのセクションは、それぞれの変更が行われることに固有のものであり、私は多分、私が何とか雑草アウトにすることによって行われた変更をグループを使用することができます考えていたので、例のような唯一のグループが同じ値を持つことになります私はちょうど以下のような形式のチャンクを探しているので、1行しか必要としませんでした。

_ id_|_CompName |_val_flag | value _|num|user|______updated______ 
1224 |Test company|old_value |Old City|594|user|2017-07-28 15:42:58.117 
1225 |Test company|new_value |New City|594|user|2017-07-28 15:42:58.117 
1226 |Test company|rec_value |New City|594|user|2017-07-28 15:42:58.117 
+0

データベースとは何ですか?バージョン #?また、REC_VALUEレコードの意味は?我々はそれを考慮する必要がありますか? "GROUP BY"のように見えます。ユーザーはどこから始めるのですか? "CITY"列名ですか?したがって、NEW CITYとOLD CITYは社内的に関係していますか?もしそうなら、USERとVALUEに基づいてGROUP BYを書く必要があります(後半、NEW/OLDを除く)。 – Guru

答えて

0

はじめにいくつか質問があります。

  • データベースとは何ですか?バージョン #?
  • また、 "REC_VALUE"レコードの重要性は何ですか?我々はそれを考慮する必要がありますか?

「GROUP BY」のように見えます。ユーザーはどこから始めるかです。 USERとNUMに基づいてGROUP BYを記述します。

次のようなものです。 Oracle SQL構文(未テスト)。

SELECT USER ||' updated ' || OLD_VAL || ' to ' || NEW_VAL AS DESCRIPTION 
FROM (
SELECT AUD.USER 
, MAX(CASE WHEN _VAL_FLAG = 'old_value' THEN VALUE END) OLD_VAL 
, MAX(CASE WHEN _VAL_FLAG = 'new_value' THEN VALUE END) NEW_VAL 
FROM AUDIT_TABLE AUD 
GROUP BY AUD.USER, NUM) 
+0

ありがとう私は電子メール通知を受け取っていないので、あなたが今答えているのを見ましたが、これはうまくいきます!私は週末にアイデアを練っていましたが、私はケースを使うことを考えていました。また、rec値は本当に重要ではありません。それは、変更が保存されるたびにデータベースが使用する3番目の値です。このクエリは、すべての企業のクライアント情報を格納するデータベース用です。 – dcarter

関連する問題