表 A ID     SID    SName
----   -----  -----
1      0      AAA
2      33     <NULL>
4      34     <NULL>
....表 B
ID     Name
-----  -----
33     BBB
34     CCC
....列出表A所有数据,
如果SID=0 则取 表A 的 SName 
如果SID>0 则取 表B 的 Name存储过程怎么写呢

解决方案 »

  1.   

    Select
    A.ID,
    A.SID,
    (Case When SID = 0 Then A.SName When SID > 0 Then B.Name End) As SName
    From
    A
    Left Join 
    B
    On A.SID = B.ID
      

  2.   


    select a.ID,a.SID,isnull(a.SName,b.Name) from a left join b on a.sid = b.id
      

  3.   

    select a.ID,a.SID,isnull(b.Name,a.SNAME) SName
    from A a left join B b on a.SID=b.SID
      

  4.   

    select A.id,SID,Name=(case when Sid=0 then Sname else Name end) from A Left Join B on a.sid=b.id
      

  5.   

    select A.ID, A.SID,
           SName = (case when SID = 0 then A.SName
                         when SID > 0 then B.Name
                    end)
    from A left join B
    on A.SID = B.ID
      

  6.   

    --創建測試環境
    Create Table A
    (ID Int,
    SID Int,
    SName Varchar(10))
    Insert A Select 1,      0,      'AAA'
    Union All Select 2,      33,     NULL
    Union All Select 4,      34,     NULLCreate Table B
    (ID Int,
    Name Varchar(10))
    Insert B Select 33,     'BBB'
    Union All Select 34,     'CCC'
    GO
    --測試
    Select
    A.ID,
    A.SID,
    (Case When SID = 0 Then A.SName When SID > 0 Then B.Name End) As SName
    From
    A
    Left Join 
    B
    On A.SID = B.ID
    --刪除測試環境
    Drop Table A, B
    --結果
    /*
    ID SID SName
    1 0 AAA
    2 33 BBB
    4 34 CCC
    */
      

  7.   

    如果要寫成一個存儲過程--創建存儲過程
    Create ProceDure SP_TEST
    As
    Select
    A.ID,
    A.SID,
    (Case When SID = 0 Then A.SName When SID > 0 Then B.Name End) As SName
    From
    A
    Left Join 
    B
    On A.SID = B.ID
    GO
    --調用
    EXEC SP_TEST但是實際沒有必要使用存儲過程,直接使用SQL語句查詢即可。
      

  8.   

    ---用鱼老大的数据及他的代码
    --创建存储过程
    Create Proc Protest
    as 
       Select A.ID,A.SID,
      (Case When SID = 0 Then A.SName When SID > 0 Then B.Name End) As SName
       From A Left Join B
       On A.SID = B.ID
    go
    --调用存储过程
    Exec Protest
      

  9.   

    SQL版就是好!10分钟解决问题!我有个问题在WEB版挂了3天无人应答!郁闷马上结贴!
      

  10.   

    fusoft(黑马) ( ) 信誉:94  2007-07-26 10:17:07  得分: 0  SQL版就是好!10分钟解决问题!我有个问题在WEB版挂了3天无人应答!郁闷马上结贴!------------------歡迎以後常來,呵呵