台灣最大程式設計社群網站
線上人數
1693
 
會員總數:246318
討論主題:189850
歡迎您免費加入會員
討論區列表 >> ASP >> 同一個資料表,兩個欄位比較
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
同一個資料表,兩個欄位比較
價值 : 10 QP  點閱數:7049 回應數:11
樓主

tiger
門外漢
0 14
480 53
發送站內信

請問同一個資料表,兩個欄位比較,如果有相同的人名就不取出,不知sql語法要如何下呀
A攔ABCD
B攔AB
最後取出CD

本篇文章發表於2014-05-09 10:17
1樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
這個應該沒辦法用SQL直接做
用ASP的字串取代函數吧
如果A欄位內容是A,B,C,D這種形式的話
就要將AB欄位的內容先拆成陣列再比對處理
本篇文章回覆於2014-05-09 13:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

tiger
檢舉此回應
我試著用陣列比對方式如下,但得到的結果和我想要的不同,請各位幫我看看哪裡有問題呀
a= rs2("A欄位")
b= rs2("B欄位")
aa=split(a,",")
bb=split(b,",")
for i=0 to ubound(aa)
for j=0 to ubound (bb)
if aa(i)<>bb(j) then
s=s+aa(i)&","
end if
next
next
response.write s
本篇文章回覆於2014-05-09 13:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
當然會錯啊
假設
aa(0)="A"
aa(1)="B"
aa(2)="C"
aa(3)="D"
bb(0)="A"
bb(1)="B"
你的比對方式
當i=0的時候,j=0雖然相同不加入字串,但是j=1時就會因為相異而將值串入字串中
稍微修改一下試試看
本篇文章回覆於2014-05-09 15:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

tiger
檢舉此回應
還是不行耶,得到的答案還是不對耶
本篇文章回覆於2014-05-09 20:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

風燭殘年
捐贈 VP 給 風燭殘年 檢舉此回應
T-SQL 語法, 是這樣吧..
SELECT CASE WHEN CHARINDEX(B攔, A攔) = 1 THEN REPLACE(A攔,B攔,'') ELSE A欄 END from table1

又或是
SELECT A欄 from table1 where A欄 not in (select distinct B欄 from table1)

不是很確定你所指的 A攔ABCD, B攔AB 的意思!
在A欄中, 是 ABCD 串在一起...還是有可能為 A 或 B 或 C 或 D
同樣在B欄中是 AB 串在一起...還是有可能為 A 或 B 呢?
如果是串在一起, 就是第一種, 不然就是第二種了.




本篇文章回覆於2014-05-09 23:14
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

tiger
檢舉此回應
事實上
我的兩個欄位是人名
A欄值為(阿明,阿正,張三,小明)
B欄值為(阿明,阿正)
兩欄比對取出不一樣的人名
最後取出 張三和小明
風燭殘年兄 我用你第一個sql語法不能用呢
不知是為甚麼
本篇文章回覆於2014-05-10 09:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
請把你的a,b和s列印出來看看,以及你期望得到的答案是什麼
光是講不一樣,也沒辦法判斷到底問題出在哪
本篇文章回覆於2014-05-12 09:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

風燭殘年
捐贈 VP 給 風燭殘年 檢舉此回應
如果你的欄位資料是

A欄值為(阿明,阿正,張三,小明)
B欄值為(阿明,阿正)


那麼在 SQL 中就不是那麼好處理.
就我的建議就是取出資料後,再來進行資料的比對!


a= trim(rs2("A欄位"))
b= rs2("B欄位")
bb=split(b,",")
for i=0 to ubound(bb)
if InStr(a,trim(bb(i))) > 0 then
a = replace(a,trim(bb(i)),"")
a = replace(a,",,",",")
end if
next
if LEFT(a,1) = "," then a = RIGHT(LEN(a)-1)
if RIGHT(a,1) = "," then a = LEFT(LEN(a)-1)
aa = split(a,",")

for i=0 to ubound(aa)
response.write aa(i) & "<br>"
next

本篇文章回覆於2014-05-12 13:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

tiger
檢舉此回應
Microsoft VBScript 執行階段錯誤 錯誤 '800a01c2'

引數的個數錯誤或指定了不正確的屬性: 'LEFT'

1.asp, 行60
if RIGHT(a,1) = "," then a = LEFT(LEN(a)-1)
好像這行有問題耶
本篇文章回覆於2014-05-12 14:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

風燭殘年
捐贈 VP 給 風燭殘年 檢舉此回應
打太快...打錯了...
if LEFT(a,1) = "," then a = RIGHT(LEN(a)-1)
if RIGHT(a,1) = "," then a = LEFT(LEN(a)-1)

要改為
if LEFT(a,1) = "," then a = RIGHT(a, LEN(a)-1)
if RIGHT(a,1) = "," then a = LEFT(a, LEN(a)-1)
本篇文章回覆於2014-05-12 23:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

tiger
檢舉此回應
謝謝兩位學長熱情相助
特別感謝風燭殘年兄
讓我百思不解的問題有了答案。
本篇文章回覆於2014-05-14 11:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.