質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Q&A

解決済

1回答

346閲覧

MicrosoftのSQLServerのあるテーブルについて、一部にレコードのWりが発生しています。全項目同一です。片方だけ削除できる都合の良いSQL文は ございませんか?

saya24

総合スコア247

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

0グッド

0クリップ

投稿2020/11/05 01:50

編集2020/11/05 02:09

単月の内容を収めたテーブルA、左記を毎月追加蓄積しているまったく同レイアウトのテーブルBがあります。

月一回=月次処理にて、テーブルAからテーブルBへの追加を果たす処理を運用中です。
INSERT INTO テーブルB SELECT * FROM テーブルA
ですね。

本日発覚したのですが、過去に 当該処理を2回実施されてしまっている月が 存在していることが発覚しました。
2014年09月のみ レコードが重複して テーブルBに登録されてしまっています。

で、表題のとおりの質問となっています。

そんな都合の良いSQL文は ない、とのことであれば 致し方なしに 一度Excel出力して、当該月丸々をテーブルBより削除
Excelから Wっている行を削除
行削除の済んだExcelを 一時テーブル テーブルCに格納
テーブルCから テーブルBへの一括投入: INSERT INTO テーブルB SELECT * FROM テーブルC

しかないかなぁ と考えています。

良い方法があれば ご見解いただけますと幸いです、よろしくお願い申し上げます。

20201105 11:09AM CREATE文を追加

SQL

1CREATE TABLE [dbo].[テーブルB]( 2 [営業所コード] [char](10) NULL, 3 [担当者コード] [char](6) NULL, 4 [品名コード] [char](8) NULL, 5 [数量] [decimal](7, 0) NULL, 6 [納入金額] [decimal](18, 0) NULL, 7 [納入年月] [decimal](6, 0) NULL 8) ON [PRIMARY]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2020/11/05 02:02

CREATE TABLEを書いていただけないでしょうか? (PRIMARY KEYは付いていないのですか?)
saya24

2020/11/05 02:03

ついていないです。
saya24

2020/11/05 02:10

CREATE文を本文に追加しました、ご確認くださいませ
hihijiji

2020/11/05 02:45

CREATE文のまま PRIMARY KEY なしの運用ですか? ユニークINDEXもなしですか?
saya24

2020/11/05 09:03 編集

レコードを一意に特定するためのkey、インデックスが全くないです。SQLといえばのsaziさんから書き込みが!! ようやく 理解できました saziさんの掲載の内容が。
guest

回答1

0

ベストアンサー

1.元データをunionしたselect intoで別テーブルを作成
2.元データを削除
3.別テーブルの内容を元データに追加

1は以下の様な内容

SQL

1select * into 新たなテーブル 2from ( 3 select * from 元テーブル 4union 5 select * from 元テーブル 6) mrg

投稿2020/11/05 03:09

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saya24

2020/11/05 09:04

UNIONが重複を除去して 表示される点を 利用する、確かにいい手だてですね。 また 助けられました!
sazi

2020/11/05 10:27

データの範囲が限定できるなら、作成と削除にwere条件指定すると時間が短縮できるかもしれません。 くれぐれもデータのバックアップは忘れずに。 ※select into を利用してテーブルのバックアップを取るのが手間が掛からずにお薦めです。
saya24

2020/11/05 11:10

重複を除いた行を 挿入しなおす前に() 一応件数を確認しようと以下を実行したところ、半分の件数にならない...。なぜなんでしょうかね??? 746件だけ多い SELECT * FROM (SELECT * FROM テーブルA UNION SELECT * FROM テーブルA) MRG もし思い当たる節あれば 教えてください
sazi

2020/11/05 11:35 編集

想定と違い一部が違っているんじゃないでしょうか。 2回実施する間に更新が行われていて、違っているとかじゃないですか。 更新時間などの項目も無いようですので、結局確認が必要という事なら、エクセル使った処理を行う方が早いと思いますけど。
sazi

2020/11/05 11:36

今後の為に設計は見直した方が良さそうですね。
saya24

2020/11/05 11:44

>2回実施する間に更新が行われていて、違っているとかじゃないですか。 saziさんの洞察力に感服。 やり直したからには 理由があったからで 十分考えられますね。 とにかく役に立つ情報をいつも提供頂き 助かります。 あとは対応方針次第であり、問い合わせ主旨はもう得られましたから クローズとしたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問