日期:2014-05-17 浏览次数:20417 次
SELECT
a.userid,
b.oid,
b.tid,
b.rid,
[status] = (CASE WHEN b.rid IS NULL THEN b.ostatus ELSE b.rstatus END),
[count] = COUNT(*) --不知道楼主的COUNT指的是什么?
FROM tableA a
INNER JOIN tabelB b
ON a.tid = b.tid
WHERE a.userid = 1
create table tableA(tid int, UserID nvarchar(10))
insert into tableA values (1,'张三')
insert into tableA values (2,'李四')
create table tableB(oid int,tid int,ostatus int, rid int ,rstatus int)
insert into tableB values (1,1,99,12,88)
insert into tableB values (2,2,66,NULL,77)
insert into tableB values (3,2,78,NULL,54)
insert into tableB values (4,2,78,NULL,55)
insert into tableB values (5,1,98,12,87)
insert into tableB values (6,1,99,12,88)
IF EXISTS(SELECT * FROM sys.objects WHERE object_id = OBJECT_ID('TEST') AND type = 'P')
DROP PROC TEST
GO
/*
EXEC TEST
@USER_ID = '李四'
*/
CREATE PROC TEST
@USER_ID VARCHAR(10)
AS
BEGIN
Declare @ISNULL As int
set @ISNULL=( select max(b.rid)
from tableA a
inner join tableB b
on a.tid=b.tid
where a.UserID=@USER_ID
)
if(@ISNULL=NULL)
select b.ostatus,
[COUNT]= COUNT(case when b.rid is not null then 1 else 0 end)
from tableA a
inner join tableB b
on a.tid=b.tid
where a.UserID=@USER_ID
group by b.ostatus
else
select b.rstatus,
[COUNT]= COUNT(case when b.rid is not null then 1 else 0 end)