表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;
希望大家幫我解決一下!
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;
希望大家幫我解決一下!
你的name与什么相 比较,
group by NAME having count(1)>1)
select 'True'
else
select 'False'
我觉得中国风的有点不对的样子
你好像只是找出有相同的NAME,他是要每个PRID对应的NAME都要一样
你只是判断只要有重复的NAME就 TRUE
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')
2.傳表A.PRID有n個,我要判斷這n個表A.PRID所關聯的表B.NAME是不是一樣(例如:參數(PR0001,PR0002),但是name不一樣,所以返回false)
select 'True'
else
select 'False'
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不知道这个是不是你要的。另:在这里只传了两个参数。
PRID(包含多條)相同的name,你這個時候就出問題了
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...')