CharIndex呢??Select C.* From 
(Select A.* From MquoteP A Inner Join (Select I_No,M_No,Max([Date]) As [Date] From MquoteP Group By  I_No,M_No) B
On A.I_No=B.I_No And A.M_No=B.M_No) C
Inner Join item D
On C.I_No=D.I_No And CharIndex(','+C.M_No+',',','+D.M_NoList+',')>0

解决方案 »

  1.   

    select  b.* 
    from item a,
    (select * 
    from MquoteP a 
    where not exists(
    select 1 
    from MquoteP 
    where I_No=a.I_No and M_no=a.M_no and Date>a.Date)
    ) b 
    where charindex(','+b.M_No+',',','+a.M_NoList+',')>0 and a.I_No=b.I_No
      

  2.   

    謝謝  paoluo(一天到晚游泳的鱼)  ,不過 CharIndex 比起 Like 來速度可能更慢,而且多次 inner join 之後很容易出 重復記錄錯誤,我之所以想用 in ,主要是因為
     in ()裡面已經是常數列表了,速度可能會快一點,否則一個查詢可能要 2分鐘以上,會超時錯誤。
      

  3.   

    上面的語句寫少了一個條件--建立測試環境
    Create Table item
    (I_No Varchar(5),
    M_NoList Varchar(50),
    show Bit)
    Create Table MquoteP
    (I_No Varchar(5),
    M_No Varchar(4),
    [Date] Varchar(10),
    Price Numeric(10,2),
    I_Qty1 Int,
    I_Price1 Int)
    GO
    --插入數據
    Insert item Select 'pro01',   'm01',        1
    Union All Select 'pro02',   'm01,m02',1
    Union All Select 'pro03',   'm03',        1
    Union All Select 'pro04',   'm02,m03',1Insert MquoteP Select 'pro01',  'm01',  '2005-03-02',  1.02,    1000,      1020
    Union All Select 'pro01',  'm01',  '2006-01-03',  1.01,    1000,      1010
    Union All Select 'pro02',  'm01',  '2005-03-03',  0.56,    1000,      560
    Union All Select 'pro02',  'm02',  '2005-12-08',  0.55,    1000,      550
    Union All Select 'pro03',  'm03',  '2006-01-21',  2.08,    1,         2.08
    Union All Select 'pro03',  'm09',  '2006-05-03',  2.10,    1,         2.10
    Union All Select 'pro04',  'm02',  '2005-09-08',  31.2,    1,         31.2
    Union All Select 'pro04',  'm03',  '2005-09-08',  31.5,    1,         31.5
    Union All Select 'pro04',  'm03',  '2006-01-02',  31.7,    1,         31.7
    GO
    --測試
    Select C.* From 
    (Select A.* From MquoteP A Inner Join (Select I_No,M_No,Max([Date]) As [Date] From MquoteP Group By  I_No,M_No) B
    On A.I_No=B.I_No And A.M_No=B.M_No And A.[Date] =B.[Date] ) C
    Inner Join item D
    On C.I_No=D.I_No And CharIndex(','+C.M_No+',',','+D.M_NoList+',')>0
    GO
    --刪除測試環境
    Drop Table MquoteP,item
    GO
    --結果
    /*
    I_No M_No Date Price I_Qty1 I_Price1
    pro01 m01 2006-01-03 1.01 1000 1010
    pro02 m02 2005-12-08 .55 1000 550
    pro02 m01 2005-03-03 .56 1000 560
    pro03 m03 2006-01-21 2.0 1 2
    pro04 m03 2006-01-02 31.70 1 31
    pro04 m02 2005-09-08 31.20 1 31
    */
      

  4.   

    "不過 CharIndex 比起 Like 來速度可能更慢"很多资料上都说CharIndex 比like速度快,不知你的理解是在哪里看到的
      

  5.   

    to  sxycgxj(云中客) ,這個就沒必要爭論了,你去 百度一下 "CharIndex like 速度" 就知道,它們實質上的執行效率了。
      

  6.   

    http://www.codecharge.com.cn/bbs/viewmsg.asp?mid=5&reply_id=6&board=36&s=1&formlist_page=#re_topic這裡也有收集那個文章,是花生殼架的BBS ,白天開門 5.半 關門,哈,俺的。
      

  7.   

    用了你的辦法,index 在文字分析上是比 like 感覺強一點,但是我這個查詢的速度上還是太慢了,最後強行更改了兩張表的結構,還加了索引才解決問題,確實有點頭痛,但N天下來,總算是解決了..............
    謝謝你哦 paoluo(一天到晚游泳的鱼),就你還在關注ing,謝謝!
      

  8.   

    不謝,我也想多學習下。你的SQL應該蠻強的。