问个SQL语句问题,大家来啊,召集
TABLE1:
id name lev1 lev2 lev3
-- ---- ---- ---- ----
1 A TRUE FALSE FALSE
2 B TRUE FALSE FALSE
3 A FALSE TRUE FALSE
4 D TRUE FALSE FALSE
5 C TRUE FALSE FALSE
6 D 。。。
7 A 。。。
8 B 。。。
.
.
.
.
.
.
.
每个人 只能得到一个TRUE ,就是说 针对每条记录,LEV1 LEV2 LEV3 只可能有1个是TURE
现在要统计
每个人: LEV1 得到几个TRUE ,LEV2 得到几个TRUE,LEV3得到几个 TURE
------解决方案--------------------select
name,
(case lev1 when 'TRUE ' then 1 else 0 end) as lev1,
(case lev2 when 'TRUE ' then 1 else 0 end) as lev2,
(case lev3 when 'TRUE ' then 1 else 0 end) as lev3
from
TABLE1
group by
name
------解决方案----------------------试试
select id,name
,sum(case lev1 when 'true ' then 1 else 0 end) as lev1数量
,sum(case lev2 when 'true ' then 1 else 0 end) as lev2数量
,sum(case lev3 when 'true ' then 1 else 0 end) as lev3数量
from t
group by id,name
------解决方案--------------------Create Table TABLE1
(id Int,
name Char(1),
lev1 Varchar(10),
lev2 Varchar(10),
lev3 Varchar(10)
)
Insert TABLE1 Select 1, 'A ', 'TRUE ', 'FALSE ', 'FALSE '
Union All Select 2, 'B ', 'TRUE ', 'FALSE ', 'FALSE '
Union All Select 3, 'A ', 'FALSE ', 'TRUE ', 'FALSE '
Union All Select 4, 'D ', 'TRUE ', 'FALSE ', 'FALSE '
Union All Select 5, 'C ', 'TRUE ', 'FALSE ', 'FALSE '
GO
Select
Name,
LEV1 = SUM(Case LEV1 When 'TRUE ' Then 1 Else 0 End),
LEV2 = SUM(Case LEV2 When 'TRUE ' Then 1 Else 0 End),
LEV3 = SUM(Case LEV3 When 'TRUE ' Then 1 Else 0 End)
From TABLE1
Group By Name
Go
Drop Table TABLE1
--Result
/*
Name LEV1 LEV2 LEV3
A 1 1 0
B 1 0 0
C 1 0 0
D 1 0 0
*/
------解决方案--------------------create table table1(
id varchar2(10),
name varchar2(10),
lev1 varchar2(10),
lev2 varchar2(10),
lev3 varchar2(10));
insert into table1 values( '1 ', 'A ', 'TRUE ', 'FALSE ', 'FALSE ');
insert into table1 values( '2 ', 'B ', 'TRUE ', 'FALSE ', 'FALSE ');
insert into table1 values( '3 ', 'A ', 'FALSE ', 'TRUE ', 'FALSE ');