条件に基づいて1つのテーブルから別のテーブルにレコードを挿入するPSQLクエリ

SUBHAS PATIL

次の構造のPostgresテーブルが2つあります。


                              Table "public.tmp"
      Column       |          Type           | Collation | Nullable | Default 
-------------------+-------------------------+-----------+----------+---------
 MY_SL             | character varying(50)   |           |          | 
 Release           | character varying(50)   |           |          | 
 HOST              | character varying(50)   |           | not null | 
 UN NO.            | character varying(50)   |           |          | 
 STATUS            | character varying(50)   |           |          | 
 S_DATE            | character varying(50)   |           | not null | 

                                        Table "public.mo"
      Column       |          Type           | Collation | Nullable |                 Default                 
-------------------+-------------------------+-----------+----------+-----------------------------------------
 id                | integer                 |           | not null | nextval('mbss_output_id_seq'::regclass)
 HOST              | character varying(50)   |           | not null | 
 UN NO.            | character varying(50)   |           |          | 
 STATUS            | character varying(50)   |           |          | 
 S_DATE            | character varying(50)   |           | not null | 
 compliant_status  | character varying(50)   |           | not null |

以下のように、tmpテーブルにデータがあるとしましょう。

Table: tmp

 MY_SL | Release | HOST       |  UN NO.|  STATUS   |      S_DATE    
------------+-------------+-----------+----------------------+------------------
 2     | 1       | RhelTest   | 7:1:8  | COMPLIANT | 2020-08-26T15:16:48Z 
 12    | 1       | RhelTest   | 7:1:9  | COMPLIANT | 2020-08-26T15:16:48Z 
 22    | 2       | RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26T15:16:48Z 
 4     | 1       | RhelTest   | 7:2:10 | NC        | 2020-08-26T15:16:48Z 
 11    | 2       | RhelTest   | 7:2:11 | NC        | 2020-08-26T15:16:48Z 
 1     | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26T15:16:48Z 
 23    | 3       | Demo1      | 7:2:11 | NC        | 2020-08-26T15:16:48Z 
 333   | 3       | Demo2      | 7:2:11 | COMPLIANT | 2020-08-26T15:16:48Z 

ここで、public.tmpからpublic.moテーブルにデータをコピーし、以下の条件を実行するpsql INSERTINTOクエリを記述します。

ホストのSTATUS列に混合値がある場合(例:HOST:RhelTestの場合)

  • STATUS列に「COMPLIANT」と「NC」の2つの値がある場合、列コンプライアンス_ステータスはそのような行の値「PARTIAL」を持つ必要があります
  • または、「COMPLIANT」のような値が1つしかない場合、そのような行の値は「COMPLIANT」である必要があります。
  • または、「NC」のような値が1つしかない場合、そのような行の列コンプライアンスステータスには値「NON_COMPLIANT」が必要です。

最後に、public.moテーブルで期待される出力:

Table: public.mo

 id | HOST       |  UN NO.|  STATUS   |      S_DATE          | compliant_status 
------------+-------------+-----------+----------------------+------------------
 1  | RhelTest   | 7:1:8  | COMPLIANT | 2020-08-26T15:16:48Z | PARTIAL
 2  | RhelTest   | 7:1:9  | COMPLIANT | 2020-08-26T15:16:48Z | PARTIAL
 3  | RhelTest   | 7:2:1  | COMPLIANT | 2020-08-26T15:16:48Z | PARTIAL
 4  | RhelTest   | 7:2:10 | NC        | 2020-08-26T15:16:48Z | PARTIAL
 5  | RhelTest   | 7:2:11 | NC        | 2020-08-26T15:16:48Z | PARTIAL
 6  | Demo1      | 7:2:11 | NC        | 2020-08-26T15:16:48Z | NON_COMPLIANT
 7  | Demo1      | 7:2:11 | NC        | 2020-08-26T15:16:48Z | NON_COMPLIANT
 8  | Demo2      | 7:2:11 | COMPLIANT | 2020-08-26T15:16:48Z | COMPLIANT
GMB

ウィンドウ関数とcase式を使用できますstatusデータに示されているように、の可能な値が2つしかない場合、これを行う1つの方法があります。

insert in mo (host, un_no, status, s_date, compliant_status)
select host, un_no, status, s_date,
    case 
        when min_host_status <> max_host_status then 'PARTIAL'
        when min_host_status = 'NC' then 'NON_COMPLIANT'
        else min_host_status
    end
from (
    select t.*,
        min(status) over(partition by host) min_host_status,
        max(status) over(partition by host) max_host_status
    from tmp t
) t

アイデアはstatus、それぞれの最小値と最大値を比較することhostです。異なる場合compliant_statusは「PARTIAL」です。それ以外の場合は、「NC」を「NON_COMPLIANT」に変更し、他の値(「COMPLIANT」)はそのままにします。

ここではサブクエリは厳密には必要ありません。外部クエリでウィンドウ関数を直接使用することもできます。同じ表情を何度も繰り返さないので使ってみました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MySql'Insert Ignore into 'クエリを使用して、別のテーブルのいくつかの値に基づいてレコードを挿入する方法

分類Dev

別のテーブルのレコードに基づいてテーブルにレコードを挿入するMySQLクエリ

分類Dev

特定の値PSQLを挿入しない場合は、条件に基づいて別のテーブルからデータを挿入します

分類Dev

特定の条件に基づいて、テーブルから既に挿入されたデータを使用して挿入クエリを取得する

分類Dev

条件に基づいて別のテーブルから特定のレコードを選択する

分類Dev

別のテーブルのレコードに基づいてテーブルにレコードを挿入するためのSQLプロシージャ

分類Dev

Oracle-列の値に基づいて1つのテーブルから別のテーブルにデータをビニングするSQLクエリ?

分類Dev

Oracle-列の値に基づいて1つのテーブルから別のテーブルにデータをビニングするSQLクエリ?

分類Dev

テーブルの結合結果に基づいてクエリからレコードを除外する

分類Dev

他の2つの列値の差に基づいて、別のテーブルから値を挿入する

分類Dev

ある条件に基づいて、別のテーブルからテーブルへのSQL挿入/更新

分類Dev

2つの列に基づいて別のPostgresから1つのテーブルに挿入します

分類Dev

外部テーブルの最後のエントリに基づいてレコードを挿入します

分類Dev

SQLクエリ:IDに基づいて1つのテーブルから別のテーブルにMIN値を送信する方法

分類Dev

クエリの特定のグループ化に基づいて2つのテーブルに挿入する

分類Dev

MySQL-別のテーブルの列の数に基づいて1つのテーブルからレコードを取得します

分類Dev

Oracle SQL:条件に基づいて特定のレコードをあるテーブルから別のフィルタリング行に転送します

分類Dev

別のテーブルの2つの日付フィールドに基づいて1つのテーブルのレコード数を取得する方法

分類Dev

別のテーブルに基づいてテーブルから選択するレコード数Oracle

分類Dev

別のテーブルのレコードの値に基づいて、レコードをテーブルに挿入します

分類Dev

selectに基づいて1つのテーブルから別のテーブルにmysqlを挿入します

分類Dev

別のテーブルのすべてのIDに同じレコードを新しいテーブルに挿入するSQLクエリ

分類Dev

groupby句を使用して1つのテーブルから別のテーブルにレコードを挿入する方法

分類Dev

sqlは、条件に基づいて別のテーブルから行を挿入します

分類Dev

複数の基準に応じて、あるテーブルの特定の列から別のテーブルにレコードを挿入する

分類Dev

2つの結合されたテーブルの結果に基づいてクエリからレコードを除外する

分類Dev

共通の値に基づいて、2つのテーブルから1つの列を合計して別の列をカウントするMySQLクエリ?

分類Dev

基準に基づいて1つのテーブルから別のテーブルにデータをコピーする方法

分類Dev

Excel:条件に基づいて1つのテーブルから別のテーブルにデータをインポートする

Related 関連記事

  1. 1

    MySql'Insert Ignore into 'クエリを使用して、別のテーブルのいくつかの値に基づいてレコードを挿入する方法

  2. 2

    別のテーブルのレコードに基づいてテーブルにレコードを挿入するMySQLクエリ

  3. 3

    特定の値PSQLを挿入しない場合は、条件に基づいて別のテーブルからデータを挿入します

  4. 4

    特定の条件に基づいて、テーブルから既に挿入されたデータを使用して挿入クエリを取得する

  5. 5

    条件に基づいて別のテーブルから特定のレコードを選択する

  6. 6

    別のテーブルのレコードに基づいてテーブルにレコードを挿入するためのSQLプロシージャ

  7. 7

    Oracle-列の値に基づいて1つのテーブルから別のテーブルにデータをビニングするSQLクエリ?

  8. 8

    Oracle-列の値に基づいて1つのテーブルから別のテーブルにデータをビニングするSQLクエリ?

  9. 9

    テーブルの結合結果に基づいてクエリからレコードを除外する

  10. 10

    他の2つの列値の差に基づいて、別のテーブルから値を挿入する

  11. 11

    ある条件に基づいて、別のテーブルからテーブルへのSQL挿入/更新

  12. 12

    2つの列に基づいて別のPostgresから1つのテーブルに挿入します

  13. 13

    外部テーブルの最後のエントリに基づいてレコードを挿入します

  14. 14

    SQLクエリ:IDに基づいて1つのテーブルから別のテーブルにMIN値を送信する方法

  15. 15

    クエリの特定のグループ化に基づいて2つのテーブルに挿入する

  16. 16

    MySQL-別のテーブルの列の数に基づいて1つのテーブルからレコードを取得します

  17. 17

    Oracle SQL:条件に基づいて特定のレコードをあるテーブルから別のフィルタリング行に転送します

  18. 18

    別のテーブルの2つの日付フィールドに基づいて1つのテーブルのレコード数を取得する方法

  19. 19

    別のテーブルに基づいてテーブルから選択するレコード数Oracle

  20. 20

    別のテーブルのレコードの値に基づいて、レコードをテーブルに挿入します

  21. 21

    selectに基づいて1つのテーブルから別のテーブルにmysqlを挿入します

  22. 22

    別のテーブルのすべてのIDに同じレコードを新しいテーブルに挿入するSQLクエリ

  23. 23

    groupby句を使用して1つのテーブルから別のテーブルにレコードを挿入する方法

  24. 24

    sqlは、条件に基づいて別のテーブルから行を挿入します

  25. 25

    複数の基準に応じて、あるテーブルの特定の列から別のテーブルにレコードを挿入する

  26. 26

    2つの結合されたテーブルの結果に基づいてクエリからレコードを除外する

  27. 27

    共通の値に基づいて、2つのテーブルから1つの列を合計して別の列をカウントするMySQLクエリ?

  28. 28

    基準に基づいて1つのテーブルから別のテーブルにデータをコピーする方法

  29. 29

    Excel:条件に基づいて1つのテーブルから別のテーブルにデータをインポートする

ホットタグ

アーカイブ