線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2129
推到 Plurk!
推到 Facebook!

SQL抓出重複的資料列疑問

缺席
redragon
一般會員


發表:1
回覆:2
積分:0
註冊:2015-03-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2015-12-16 22:20:09 IP:112.105.xxx.xxx 訂閱
-- SQL抓出重複的資料列疑問

-- 第一次在此版提問題,如有不周敬請見諒!

-- 要抓出重複的資料列來判斷

-- 重複的定義是同一天,同一客人,同業務,只能輸入一筆資料,2筆以上就是重複

-- 測試環境 MS SQL 2008 R2 EXPRESS

-- 在看似雷同的SQL語法,卻有不同的答案,新手不得其解,盼先進同志加以指教



CREATE TABLE [dbo].[TestReInput] (

[日期] nvarchar(10),

[客戶] nvarchar(10),

[業務] nvarchar(10),

[內容] nvarchar(10)

)



INSERT INTO TestReInput VALUES ('2015/12/01','001','AA','1')

INSERT INTO TestReInput VALUES ('2015/12/01','002','AA','1')

INSERT INTO TestReInput VALUES ('2015/12/02','001','AA','1')

INSERT INTO TestReInput VALUES ('2015/12/02','002','AA','1')

INSERT INTO TestReInput VALUES ('2015/12/02','002','AA','2')

INSERT INTO TestReInput VALUES ('2015/12/03','003','AA','1')

INSERT INTO TestReInput VALUES ('2015/12/03','003','AA','2')

INSERT INTO TestReInput VALUES ('2015/12/03','003','AA','3')

INSERT INTO TestReInput VALUES ('2015/12/05','001','AA','1')

INSERT INTO TestReInput VALUES ('2015/12/05','001','AA','2')

INSERT INTO TestReInput VALUES ('2015/12/05','002','AA','1')



-- 重複輸入的是'2015/12/02'有2筆,'2015/12/03'有3筆,'2015/12/05'有2筆,SQL目標要抓此7筆資料列出來



-- 查詢1:

select * FROM [TestReInput] mm WHERE mm.[日期] In (

SELECT [日期] FROM [TestReInput]

WHERE [客戶] = [mm].[客戶] And [業務] = [mm].[業務]

GROUP BY [日期],[客戶],[業務]

HAVING Count(*)>1

) order by mm.[日期],mm.[客戶],mm.[業務]

-- 執行結果共7筆資料列列出來,有表現出想要的結果



-- 查詢2:

select * FROM [TestReInput] WHERE [日期] In (

SELECT mm.[日期] FROM [TestReInput] mm

WHERE [客戶] = [mm].[客戶] And [業務] = [mm].[業務]

GROUP BY mm.[日期],mm.[客戶],mm.[業務]

HAVING Count(*)>1

) order by [日期],[客戶],[業務]

-- 執行結果共9筆資料列列出來



問題點:

1.查詢1,是我要的結果,但解讀語意,不是應該將第一層資料表[TestReInput]內[日期]符合第二層資料表找出的3個有重複的日期,共有9筆資料,但卻列出7筆?

2.查詢2與查詢1的差別只是 mm 替代字擺在第一層資料表與第二層資料表處,為何執行結果會不一樣?

3.是否還有其他SQL動作解析工具可以作更細微分析?



尚請先進,撥空指教
編輯記錄
redragon 重新編輯於 2015-12-17 06:02:05, 註解 無‧
redragon 重新編輯於 2015-12-17 06:40:27, 註解 無‧
redragon 重新編輯於 2015-12-17 07:03:21, 註解 無‧
redragon 重新編輯於 2015-12-17 10:18:42, 註解 無‧
redragon
一般會員


發表:1
回覆:2
積分:0
註冊:2015-03-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2015-12-22 11:46:33 IP:112.105.xxx.xxx 訂閱
得到答案,分享如下
結論:查詢2中因為括號形成的第二層子句中未指定別名的欄位就是本身資料集,
所以 [客戶] = [mm].[客戶] 就等於是 [mm].[客戶] = [mm].[客戶] 等於是 [客戶] = [客戶],
真是當局者迷~
感謝指教!!
redragon
一般會員


發表:1
回覆:2
積分:0
註冊:2015-03-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2015-12-22 22:30:09 IP:112.105.xxx.xxx 訂閱
好像不能自行結案,請問該如何處理,才能結案?
系統時間:2017-04-24 15:23:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!