表A
ID  PRID    MATID
 1  PR0001  ZX0001
 2  PR0002  ZX0002表B
ID  MATID   NAME
 1  ZX0001  辦公費
 2  ZX0002  雜項購置我現在要通過sql語句返回一個bool值,傳進去的參數(PR0001,PR0002,...N)
在sql語句中做比較,判斷每個PRID所關聯的表B中的NAME是否相同,是返回true,否返回false;
希望大家幫我解決一下!

解决方案 »

  1.   

    判斷每個PRID所關聯的表B中的NAME是否相同,------------------>
    你的name与什么相 比较,
      

  2.   

    if exists(select  1 from  a join  b on a.MATID=b.MATID where  patindex('%,'+a.PRID+',%',','+@變量+',')>0
    group by NAME having count(1)>1)
    select 'True'
    else
    select 'False'
      

  3.   

    不知道是不是我理解错了
    我觉得中国风的有点不对的样子
    你好像只是找出有相同的NAME,他是要每个PRID对应的NAME都要一样
    你只是判断只要有重复的NAME就 TRUE
      

  4.   

    lz没有说明name和什么想比较啊。她传进去的参数是PR0001,PR0002,而不是name,
      

  5.   


    CREATE TABLE A (ID INT,PRID VARCHAR(20),MATID VARCHAR(20))INSERT INTO  A
    SELECT 1 , 'PR0001' , 'ZX0001'  UNION ALL
    SELECT 2,  'PR0002' , 'ZX0002' 
    CREATE TABLE B (ID INT,MATID VARCHAR(20),NAME VARCHAR(20))
    INSERT INTO B
    SELECT 1,  'ZX0001',  N'辦公費 ' UNION ALL 
    SELECT 2 , 'ZX0002' , N'雜項購置'
    Create Function F_Test (@PRID varchar(10)) returns  bit
    as 
    Begin
    DECLARE  @T BIT
    if (SELECT COUNT(B.NAME) From A a, B b WHERE A.MATID=B.MATID And A.PRID=@PRID)>(SELECT COUNT(DISTINCT B.NAME) From A a, B b WHERE A.MATID=B.MATID And A.PRID=@PRID)
    SET @T=1
    ELSE
    SET @T=0
    RETURN(@T)
    EndSELECT DEMO1.DBO.F_TEST('PR0001')
      

  6.   

    1.傳表A.PRID進去,是不是可以得到表B.NAME?
    2.傳表A.PRID有n個,我要判斷這n個表A.PRID所關聯的表B.NAME是不是一樣(例如:參數(PR0001,PR0002),但是name不一樣,所以返回false)
      

  7.   

    if (select     count(distinct NAME) from     a join     b on a.MATID=b.MATID where     patindex('%,'+a.PRID+',%',','+@變量+',')>0)
    select 'True'
    else
    select 'False'
      

  8.   


    create function f1
    (@s1 varchar(10),
     @s2 varchar(10)
    ) returns bit
    as
    begin
    declare @name1 varchar(10),@name2 varchar(10),@flag bit
    select @name1=NAME 
    from tba,tbb
    where tba.MATID=tbb.MATID and PRID=@s1select @name2=NAME 
    from tba,tbb
    where tba.MATID=tbb.MATID and PRID=@s2if @name1=@name2
      set @flag=1
    else set @flag=0return @flag
    end不知道这个是不是你要的。另:在这里只传了两个参数。
      

  9.   

    让你望见影子的墙,不對,我都說了n個PRID,你的sql,真的不行
      

  10.   

    中國風,你的語句有點問題
    PRID(包含多條)相同的name,你這個時候就出問題了
      

  11.   


    create function f1
    (@s varchar(10)
    ) returns bit
    as
    begin
    DECLARE @a varchar(10), @c varchar(10),@name1 varchar(10),@name2 varchar(10)
      set @c=@s
      set @a=left(@c,6)
      set @c=right(@c,len(@c)-6)
      select @name1=NAME 
    from tba,tbb
    where tba.MATID=tbb.MATID and PRID=@a
    while(len(@c)>0)
    begin
      set @a=left(@c,6)
      select @name2=NAME 
    from tba,tbb
    where tba.MATID=tbb.MATID and PRID=@a
      if @name1<>@name2
         return 0
      set @c=right(@c,len(@c)-6)
    end
    return 1
    endSELECT f1('PR0001PR0002PR0003...')