34,590
社区成员
发帖
与我相关
我的任务
分享
create table #u(uid int,sum1 int,sum2 int)
insert into #u values (1,2,3)
insert into #u values (2,1,0)
insert into #u values (3,0,0)
insert into #u values (4,1,2)
insert into #u values (5,0,0)
insert into #u values (6,0,0)
insert into #u values (7,0,0)
create table #m(mid int,uid int,tid int,ind int)
insert into #m values (1,1,11,0)
insert into #m values (2,1,11,1)
insert into #m values (3,1,11,1)
insert into #m values (4,4,12,0)
insert into #m values (5,4,12,1)
insert into #m values (6,4,12,1)
insert into #m values (7,1,12,1)
insert into #m values (8,1,13,0)
insert into #m values (9,2,14,0)
create table #s(mid int)
insert into #s values (10)
insert into #s values (11)
create table #t(tid int,mid int)
insert into #t values (11,10)
insert into #t values (12,10)
insert into #t values (13,10)
insert into #t values (14,11)
SELECT * FROM #u;
SELECT * FROM #m;
SELECT * FROM #s;
SELECT * FROM #t;
SELECT count(case ind when 0 then 0 end) as sum1,count(case ind when 1 then 1 end) as sum2, uid FROM #m group by uid;
drop table #u,#m,#s,#t;
/*
uid sum1 sum2
----------- ----------- -----------
1 2 3
2 1 0
3 0 0
4 1 2
5 0 0
6 0 0
7 0 0
(7 行受影响)
mid uid tid ind
----------- ----------- ----------- -----------
1 1 11 0
2 1 11 1
3 1 11 1
4 4 12 0
5 4 12 1
6 4 12 1
7 1 12 1
8 1 13 0
9 2 14 0
(9 行受影响)
mid
-----------
10
11
(2 行受影响)
tid mid
----------- -----------
11 10
12 10
13 10
14 11
(4 行受影响)
sum1 sum2 uid
----------- ----------- -----------
2 3 1
1 0 2
1 2 4
(3 行受影响)
*/
/*
(1 行受影响)
uid sum1 sum2
----------- ----------- -----------
1 0 0
2 1 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
(7 行受影响)
mid uid tid ind
----------- ----------- ----------- -----------
9 2 14 0
(1 行受影响)
mid
-----------
11
(1 行受影响)
tid mid
----------- -----------
14 11
(1 行受影响)
sum1 sum2 uid
----------- ----------- -----------
1 0 2
(1 行受影响)
*/
create table #u(uid int,sum1 int,sum2 int)
insert into #u values (1,2,3)
insert into #u values (2,1,0)
insert into #u values (3,0,0)
insert into #u values (4,1,2)
insert into #u values (5,0,0)
insert into #u values (6,0,0)
insert into #u values (7,0,0)
create table #m(mid int,uid int,tid int,ind int)
insert into #m values (1,1,11,0)
insert into #m values (2,1,11,1)
insert into #m values (3,1,11,1)
insert into #m values (4,4,12,0)
insert into #m values (5,4,12,1)
insert into #m values (6,4,12,1)
insert into #m values (7,1,12,1)
insert into #m values (8,1,13,0)
insert into #m values (9,2,14,0)
create table #s(mid int)
insert into #s values (10)
insert into #s values (11)
create table #t(tid int,mid int)
insert into #t values (11,10)
insert into #t values (12,10)
insert into #t values (13,10)
insert into #t values (14,11)
--SQL语句如下:
DECLARE @mid int;
SET @mid=10
DECLARE @s table(mid int)
DELETE #s
OUTPUT deleted.mid INTO @s
WHERE mid=@mid
DECLARE @t TABLE(tid int)
DELETE A
OUTPUT deleted.tid INTO @t
FROM #t AS A
JOIN @s AS B
ON A.mid=B.mid
DECLARE @m TABLE(uid int,ind int)
DELETE A
OUTPUT deleted.uid,deleted.ind INTO @m
FROM #m AS A
JOIN @t AS B
ON A.tid=B.tid
UPDATE A SET
sum1=A.sum1-B.sum1,
sum2=A.sum2-B.sum2
FROM #u AS A
JOIN (
SELECT
uid,
SUM(CASE WHEN ind=0 THEN 1 ELSE 0 END) AS sum1,
SUM(CASE WHEN ind=1 THEN 1 ELSE 0 END) AS sum2
FROM @m
GROUP BY uid
) AS B
ON A.uid=B.uid
SELECT * FROM #u;
SELECT * FROM #m;
SELECT * FROM #s;
SELECT * FROM #t;
SELECT count(case ind when 0 then 0 end) as sum1,count(case ind when 1 then 1 end) as sum2, uid FROM #m group by uid;
--删除测试
drop table #u,#m,#s,#t;
/*
uid sum1 sum2
----------- ----------- -----------
1 0 0
2 1 0
3 0 0
4 0 0
5 0 0
6 0 0
7 0 0
(7 行受影响)
mid uid tid ind
----------- ----------- ----------- -----------
9 2 14 0
(1 行受影响)
mid
-----------
11
(1 行受影响)
tid mid
----------- -----------
14 11
(1 行受影响)
sum1 sum2 uid
----------- ----------- -----------
1 0 2
(1 行受影响)
*/
DECLARE @mid int;
SET @mid=10
DECLARE @s table(mid int)
DELETE #s
OUTPUT deleted.mid INTO @s
WHERE mid=@mid
DECLARE @t TABLE(tid int)
DELETE A
OUTPUT deleted.tid INTO @t
FROM #t AS A
JOIN @s AS B
ON A.mid=B.mid
DECLARE @m TABLE(uid int,ind int)
DELETE A
OUTPUT deleted.uid,deleted.ind INTO @m
FROM #m AS A
JOIN @t AS B
ON A.tid=B.tid
UPDATE A SET
sum1=A.sum1-B.sum1,
sum2=A.sum2-B.sum2
FROM #u AS A
JOIN (
SELECT
uid,
SUM(CASE WHEN ind=0 THEN 1 ELSE 0 END) AS sum1,
SUM(CASE WHEN ind=1 THEN 1 ELSE 0 END) AS sum2
FROM @m
GROUP BY uid
) AS B
ON A.uid=B.uid