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

子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫?

答題得分者是:eaglewolf
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-28 21:13:20 IP:220.131.xxx.xxx 訂閱
子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫? 我是用ado元件去存取access的.mdb資料庫

要回傳兩欄位值,是因為要這兩欄位值才能表示要在主查詢予以排除,而且這兩欄位值不表示在主查詢是惟一值


如 欄位名如下

no 姓名 , 身分證號 , 消費金額 , 更新日期, 消費日期 , 消費次數 , 最多消費總次數
1 tom a111 $100 95.1.6 95.1.6 1 3
2 mary b111 $50 95.1.8 95.1.8 1 3
3 john c111 $100 95.1.5 95.1.5 1 3
4 tom a111 $100 95.1.6 95.2.3 2 3
5 john c111 $100 95.1.5 95.2.4 2 3
6 john c111 $100 95.1.5 95.3.1 3 3
7 mary b111 $100 95.1.8 95.2.9 2 3
8 mary b111 $100 95.1.8 95.3.8 3 3
9 john c111 $100 95.4.1 95.4.1 1 4
10 john c111 $50 95.4.1 95.5.5 2 4

我希望下的sql是把消費次數=最多消費總次數的記錄予以排除,即顯示如下結果
no 姓名 , 身分證號 , 消費金額 , 更新日期, 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1 tom a111 $100 95.1.6 95.1.6 1 3
4 tom a111 $100 95.1.6 95.2.3 2 3
9 john c111 $100 95.4.1 95.4.1 1 4
10 john c111 $50 95.4.1 95.5.5 2 4

我寫如下但不成功
select * from table where (身分證號 ,更新日期) no exists (select 身分證號 ,更新日期 from table where 消費次數=最多消費總次數)

編輯記錄
ry_lee 重新編輯於 2007-08-28 21:47:25, 註解 無‧
ry_lee 重新編輯於 2007-08-28 21:49:29, 註解 無‧
ry_lee 重新編輯於 2007-08-28 21:50:30, 註解 無‧
ry_lee 重新編輯於 2007-08-28 21:51:26, 註解 無‧
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-28 21:39:31 IP:220.132.xxx.xxx 訂閱
你的需求應該是
選出 消費紀錄尚未達最多消費次數的顧客的所有紀錄

select * From Table1 where [身分証號] not in
(select [身分証號] From Tabel1 Where [最多消費總次數(最多3次)] = [消費次數] )
===================引 用 ry_lee 文 章===================
子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫?我是用ado元件去存取access的.mdb資料庫

要回傳兩欄位值,是因為要這兩欄位值才能表示要在主查詢予以排除,而且這兩欄位值不表示在主查詢是惟一值


如 欄位名如下

no 姓名 , 身分證號 , 消費金額 , 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $100 95.1.6 1 3
2 mary b111 $50 95.1.8 13
3 john c111 $100 95.1.5 1 3
4 tom a111 $100 95.2.3 2 3
5 john c111 $100 95.2.4 2 3
6 john c111 $100 95.3.1 3 3
7 mary b111 $100 95.2.9 2 3
8 mary b111 $100 95.3.8 3 3

我希望下的sql是把消費次數=最多消費總次數(最多3次)的記錄予以排除,即顯示如下結果

no 姓名 , 身分證號 , 消費金額 , 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $100 95.1.6 1 3
4 tom a111 $100 95.2.3 2 3



------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
編輯記錄
eaglewolf 重新編輯於 2007-08-28 21:40:03, 註解 無‧
eaglewolf 重新編輯於 2007-08-28 21:40:57, 註解 無‧
ry_lee
高階會員


發表:368
回覆:251
積分:123
註冊:2002-03-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-28 21:56:08 IP:220.131.xxx.xxx 訂閱
謝謝你:

同一身分證號可能有三筆記錄要排除,有的不能如john,所以似乎不能僅以身分證號來做為排除依據.應該是最多消費總次數=消費次數的那筆記錄的更新日期及身分證號的所有記錄都要排除.

===================引 用 eaglewolf 文 章===================
你的需求應該是
選出 消費紀錄尚未達最多消費次數的顧客的所有紀錄

select * From Table1where [身分証號] not in
(select [身分証號]From Tabel1Where [最多消費總次數(最多3次)]= [消費次數])
===================引 用 ry_lee 文 章===================
子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫?我是用ado元件去存取access的.mdb資料庫

要回傳兩欄位值,是因為要這兩欄位值才能表示要在主查詢予以排除,而且這兩欄位值不表示在主查詢是惟一值


如 欄位名如下

no 姓名 , 身分證號 , 消費金額 , 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $100 95.1.6 1 3
2 mary b111 $50 95.1.8 13
3 john c111 $100 95.1.5 1 3
4 tom a111 $100 95.2.3 2 3
5 john c111 $100 95.2.4 2 3
6 john c111 $100 95.3.1 3 3
7 mary b111 $100 95.2.9 2 3
8 mary b111 $100 95.3.8 3 3

我希望下的sql是把消費次數=最多消費總次數(最多3次)的記錄予以排除,即顯示如下結果

no 姓名 , 身分證號 , 消費金額 , 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $100 95.1.6 1 3
4 tom a111 $100 95.2.3 2 3



編輯記錄
ry_lee 重新編輯於 2007-08-28 22:07:06, 註解 無‧
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-29 00:16:13 IP:220.132.xxx.xxx 訂閱
不懂
select [身分証號] From Tabel1 Where [最多消費總次數(最多3次)]= [消費次數]
會得到b111及c111
select * From Table1 where [身分証號] not in
(select [身分証號] From Tabel1 Where [最多消費總次數(最多3次)]= [消費次數])
自然就是剩a111所有的記錄了
或許你可以列出上面語法不能排除的例子

===================引 用 ry_lee 文 章===================
謝謝你:

同一身分證號可能有三筆記錄要排除,有的不能如john,所以似乎不能僅以身分證號來做為排除依據.應該是最多消費總次數=消費次數的那筆記錄的更新日期及身分證號的所有記錄都要排除.

===================引 用 eaglewolf 文 章===================
你的需求應該是
選出 消費紀錄尚未達最多消費次數的顧客的所有紀錄

select * From Table1where [身分証號] not in
(select [身分証號]From Tabel1Where [最多消費總次數(最多3次)]= [消費次數])
===================引 用 ry_lee 文 章===================
子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫?我是用ado元件去存取access的.mdb資料庫

要回傳兩欄位值,是因為要這兩欄位值才能表示要在主查詢予以排除,而且這兩欄位值不表示在主查詢是惟一值


如 欄位名如下

no 姓名 , 身分證號 , 消費金額 , 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $100 95.1.6 1 3
2 mary b111 $50 95.1.8 13
3 john c111 $100 95.1.5 1 3
4 tom a111 $100 95.2.3 2 3
5 john c111 $100 95.2.4 2 3
6 john c111 $100 95.3.1 3 3
7 mary b111 $100 95.2.9 2 3
8 mary b111 $100 95.3.8 3 3

我希望下的sql是把消費次數=最多消費總次數(最多3次)的記錄予以排除,即顯示如下結果

no 姓名 , 身分證號 , 消費金額 , 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $100 95.1.6 1 3
4 tom a111 $100 95.2.3 2 3



------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
瘋狂火星人
一般會員


發表:1
回覆:29
積分:6
註冊:2005-06-17

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-29 00:47:59 IP:218.169.xxx.xxx 訂閱
select * from table1
where no not in (select no from table1 where 消費次數<>最多消費總次數)

一定要有一個唯一值來作過濾,以您的case中,欄位no似乎就是唯一值。

1tom a111 $10095.1.6 95.1.6 1 3
2 mary b111 $50 95.1.8 95.1.8 13
3 john c111 $100 95.1.5 95.1.5 1 3
4 tom a111 $100 95.1.6 95.2.3 2 3
5 john c111 $100 95.1.5 95.2.4 2 3
7 mary b111 $100 95.1.8 95.2.9 2 3
9 john c111 $100 95.4.1 95.4.1 1 4
10 john c111 $50 95.4.1 95.5.5 2 4

真正未達最大消費次數的應該有上面這八筆。

eaglewolf大大提到的方法,會將達到最大消費次數的人所有紀錄都過濾掉。
包含"未達"最大消費次數的紀錄。

===================引 用 ry_lee 文 章===================
子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫?我是用ado元件去存取access的.mdb資料庫

要回傳兩欄位值,是因為要這兩欄位值才能表示要在主查詢予以排除,而且這兩欄位值不表示在主查詢是惟一值


如 欄位名如下

no 姓名 , 身分證號 , 消費金額 , 更新日期, 消費日期 , 消費次數 , 最多消費總次數
1tom a111 $10095.1.6 95.1.6 1 3
2 mary b111 $50 95.1.8 95.1.8 13
3 john c111 $100 95.1.5 95.1.5 1 3
4 tom a111 $100 95.1.6 95.2.3 2 3
5 john c111 $100 95.1.5 95.2.4 2 3
6 john c111 $100 95.1.5 95.3.1 3 3
7 mary b111 $100 95.1.8 95.2.9 2 3
8 mary b111 $100 95.1.8 95.3.8 3 3
9 john c111 $100 95.4.1 95.4.1 1 4
10 john c111 $50 95.4.1 95.5.5 2 4

我希望下的sql是把消費次數=最多消費總次數的記錄予以排除,即顯示如下結果
no 姓名 , 身分證號 , 消費金額 , 更新日期, 消費日期 , 消費次數 , 最多消費總次數(最多3次)
1tom a111 $10095.1.6 95.1.6 1 3
4 tom a111 $100 95.1.6 95.2.3 2 3
9 john c111 $100 95.4.1 95.4.1 1 4
10 john c111 $50 95.4.1 95.5.5 2 4

我寫如下但不成功
select * from table where (身分證號 ,更新日期) no exists (select 身分證號 ,更新日期 from table where 消費次數=最多消費總次數)

編輯記錄
瘋狂火星人 重新編輯於 2007-08-29 00:51:51, 註解 無‧
瘋狂火星人 重新編輯於 2007-08-29 00:54:57, 註解 無‧
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-29 09:15:32 IP:211.75.xxx.xxx 訂閱
select Table1.* From Table1 where [身分證號] not in
(select [身分證號] From Table1 where [最多消費總次數] = [消費次數] )
union
select Table1.* From Table1 Inner Join
(select [no] , 身分證號 From Table1 where [最多消費總次數] = [消費次數] ) AS B
On Table1.[no] > B.[no] And Table1.身分證號 = B.身分證號
order by [no]
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
stars_chen
一般會員


發表:14
回覆:35
積分:9
註冊:2006-10-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-31 10:37:35 IP:218.104.xxx.xxx 訂閱
SELECT A.* FROM TABLE1 A,
(SELECT 身分證號, 更新日期 FROM TABLE1 WHERE 消費次數=最多消費總次數) B
WHERE A.身分證號<>B.身分證號 AND A. 更新日期<>B. 更新日期


===================引 用 ry_lee 文 章===================
子查詢要回傳兩欄位值,而主查詢的這兩欄位不能含有這兩欄位值,這sql怎麼寫??我是用ado元件去存取access的.mdb資料庫

要回傳兩欄位值,是因為要這兩欄位值才能表示要在主查詢予以排除,而且這兩欄位值不表示在主查詢是惟一值


如? 欄位名如下

?no? ?姓名?? , 身分證號 , 消費金額 ,? 更新日期,? 消費日期 , 消費次數 , 最多消費總次數??
1??????????tom??? ?a111??????????? $100???????????95.1.6?????????? 95.1.6?????????? 1?????????????????? 3
2 ???????? mary?? b111??????????? $50???????????? 95.1.8?????????? 95.1.8?????????? 1???????????????????3?????
3????????? john??? c111??????????? $100?????????? 95.1.5?????????? 95.1.5?????????? 1?????????????????? 3??
4????????? tom???? a111??????????? $100????????? 95.1.6??????????? 95.2.3??????????? 2????????????????? ?3
5????????? john??? c111??????????? $100????????? 95.1.5??????????? 95.2.4??????????? 2?????????????????? 3?????
6????????? john??? c111??????????? $100????????? 95.1.5??????????? 95.3.1??????????? 3?????????????????? 3????
7????????? mary?? b111??????????? $100????????? 95.1.8??????????? 95.2.9??????????? 2???????????????? ? 3????
8????????? mary?? b111??????????? $100????????? 95.1.8??????????? 95.3.8??????????? 3?????????????????? 3????
9????????? john??? c111??????????? $100????????? 95.4.1??????????? 95.4.1??????????? 1?????????????????? 4
10?????? john??? c111???????????? $50??????????? 95.4.1??????????? 95.5.5??????????? 2?????????????????? 4

我希望下的sql是把消費次數=最多消費總次數的記錄予以排除,即顯示如下結果
?no? ?姓名?? , 身分證號 , 消費金額 ,? 更新日期,? 消費日期 , 消費次數 , 最多消費總次數(最多3次)??
1???????tom??? ?a111??????????? $100???????????95.1.6?????????? 95.1.6?????????? 1???????????????????? 3
4?????? tom???? a111??????????? $100?????????? 95.1.6??????????? 95.2.3??????????? 2????????????????? ?3
9?????? john??? c111??????????? $100?????????? 95.4.1??????????? 95.4.1??????????? 1?????????????????? 4
10???? john??? c111???????????? $50??????????? 95.4.1??????????? 95.5.5??????????? 2?????????????????? 4

我寫如下但不成功
select * from table where (身分證號 ,更新日期) no exists (select? 身分證號 ,更新日期 from table where 消費次數=最多消費總次數)

編輯記錄
stars_chen 重新編輯於 2007-08-31 11:01:37, 註解 無‧
stars_chen 重新編輯於 2007-08-31 11:20:37, 註解 無‧
系統時間:2024-11-22 20:12:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!