作者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)