作者blReader (野火)
站內Database
標題[SQL ] 新增一筆資料
時間Tue Oct 30 17:03:31 2012
原始資料為Excel檔,
其中有多筆資料是重覆的, (人工作業疏失)
請問有沒有辦法做到排除重覆的資料, 而只進一筆呢??
重覆資料有 2 種情況:
1.從頭到尾該筆記錄完全重覆;
2.有編到流水號, 但是記錄內容卻是一模一樣;
我試過用 KEY值 找出與之相同的記錄, 並且 where KEY欄位 not in ('重覆資料KEY')
結果卻是只要重覆就沒有寫進資料庫了,
有沒有辦法讓 Insert 段只記錄一筆呢??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.59.164.121
1F:推 cloudsan:group? 10/30 18:10
目前的做法是撈出重覆資料
SELECT CLASSB_ID, CLASSM_ID, CLASSS_ID, COUNT(*)
FROM HD.TMP_CALL_CLASS
WHERE PROJECT_ID = 'TPE1103D01'
GROUP BY CLASSB_ID, CLASSM_ID, CLASSS_ID
HAVING COUNT(*) > 1
ORDER BY CLASSS_ID ASC
CLASSB_ID CLASSM_ID CLASSS_ID COUNT(*)
1 B01 0000 0210 2
2 B01 0000 0220 2
3 B01 0000 0230 2
之後在前端程式判斷首筆寫入、重覆時不再寫入,
三個CLASS欄位皆要檢核是否重覆,
其中B、M可重覆,
但B、M欄位值也屬於S分類,故S各存在一筆B、M資料,但倘若S超過一筆也算重覆,
要做的事挺繁瑣就是了 -_-a
2F:→ pooznn:SELECT DISTINCT B,C,D ...不要包含流水號那個欄位不就好了 10/31 22:22
3F:→ blReader:DISTINCT就是各取一筆了,故無法撈出重覆性資料 10/31 22:41
4F:→ blReader:除非你指的是 DISTINCT 搭配 MINUS 與自己比對,這段我已 10/31 22:48
5F:→ blReader:經寫過,是除了上述之外的第二種方式,但想利用SQL篩選 10/31 22:50
6F:→ blReader:直接撈資料排除重覆且僅寫入一次還是無解 10/31 22:51
7F:→ blReader:這段我放在公司沒帶回來,明天再貼 10/31 23:03
有關撈重覆資料,我個人試過是無法使用 DISTINCT 來處理資料 - -"
不過提供方法作為參考,也許可以做出來(?)
以下是另一段檢核,
Excel與db比對撈出「未建檔」的B類:
※ 撈出 B 屬於資料庫總類中未建檔的資料
SELECT DISTINCT CLASSB_ID, CLASSB_NAME /*撈出B類及其名稱*/
FROM TMP
WHERE CLASSB_ID IN (SELECT DISTINCT CLASSB_ID /*EXCEL檔B類*/
FROM TMP
WHERE PROJECT_ID = 'TPE1103D01' /*專案編號*/
MINUS
SELECT DISTINCT CLASS_ID /*資料庫總類*/
FROM CALL_CLASS
WHERE PROJECT_ID = 'TPE1103D01'
AND CLASS_MODE = '1') /*已啟用的類別*/
※ 編輯: blReader 來自: 210.59.164.121 (11/01 12:44)