这样可以:
SELECT A, B, COUNT(*) AS times
FROM (SELECT A, B
FROM @tb
WHERE A = 'a1'
UNION ALL
SELECT B, A
FROM @tb
WHERE B = 'a1') a
GROUP BY A, B
但要根据A,B的分组打印其他列,怎么弄?
改成这样吧:
declare @tb table(A varchar(10),B varchar(10))
insert @tb
select 'a1','b1' union all
select 'b1','a1' union all
select 'a1','b2' union all
select 'a1','b1' union all
select 'b1','a1' union all
select 'a2','b2' union all
select 'a1','b3' union all
select 'b2','a1' union all
select 'b3','a1'
SELECT A, B, COUNT(*) AS times
FROM (SELECT a.A, a.B
FROM @tb a,(select top 1 A from @tb) b
WHERE a.A = b.A
UNION ALL
SELECT a.B, a.A
FROM @tb a,(select top 1 A from @tb) b
WHERE a.B = b.a) c
GROUP BY A, B
to Jane_64()
好像这样可以:
SELECT A, B, COUNT(*) AS times
FROM (SELECT A, B
FROM @tb
WHERE A = 'a1'
UNION ALL
SELECT B, A
FROM @tb
WHERE B = 'a1') a
GROUP BY A, B
declare @tb table(A varchar(10),B varchar(10))
insert @tb
select 'a1','b1' union all
select 'b1','a1' union all
select 'a1','b2' union all
select 'a1','b1' union all
select 'b1','a1' union all
select 'a2','b2' union all
select 'a1','b3' union all
select 'b2','a1' union all
select 'b3','a1'
select A,B,times=count(*)
from (select A,B
from @tb
where left(A,1)='a'
union all
select B,A
from @tb
where left(A,1)='b') a
group by A,B
SELECT A, B, COUNT(*) AS times
FROM test
WHERE (A = 'a1') OR
(B = 'a1')
GROUP BY A, B得到
A B times
a1 b1 2
a1 b2 1
a1 b3 1
b1 a1 2
b2 a1 1
b3 a1 1
就是怎么把
a1 b1 2
b1 a1 2
这两行进行累加统计?