笔试的时候碰到了一道题(有点难),具体原题我拿不到了。但大体意思如下,不会有出入。大家帮看下这道sql题目怎么做?
----------------------T_id, T_name, T_code, T_time,
1 测试 10 a
2 测试1 0 b1
3 测试1 0 b
4 测试1 0 b1
5 测试1 0 b
6 测试1 0 b1
7 测试1 0 b
8 测试3 10 c2
9 测试3 20 c3
10 测试3 30 c1 --------------------------------现有求通过sql语句或存储过程得到获得如下的表!column1 column2 column3 column4测试 10 1 1测试1 0 6 2 测试3 60 3 3
----------------------------------说明:
-------------------
column2 中的“10,0,60 ”分别代表。10=10
0=0+0+0+0+0+0
60=10+20+30-------------------------------
column3 中“1,6,3”的含义。
1代表“测试”出现了1次
6代表 “测试1”出现了6次。
3代表“测试3”出现了3次。
--------------------------------
column4 中的“1,2,4”含义
1代表 “测试” a 出现了一次
2代表 “ 测试1”(b1,b)重复的只算一次。故 是 2
3代表 “测试3” (c1,c2,c3) 故是3.-----------------
----------------------T_id, T_name, T_code, T_time,
1 测试 10 a
2 测试1 0 b1
3 测试1 0 b
4 测试1 0 b1
5 测试1 0 b
6 测试1 0 b1
7 测试1 0 b
8 测试3 10 c2
9 测试3 20 c3
10 测试3 30 c1 --------------------------------现有求通过sql语句或存储过程得到获得如下的表!column1 column2 column3 column4测试 10 1 1测试1 0 6 2 测试3 60 3 3
----------------------------------说明:
-------------------
column2 中的“10,0,60 ”分别代表。10=10
0=0+0+0+0+0+0
60=10+20+30-------------------------------
column3 中“1,6,3”的含义。
1代表“测试”出现了1次
6代表 “测试1”出现了6次。
3代表“测试3”出现了3次。
--------------------------------
column4 中的“1,2,4”含义
1代表 “测试” a 出现了一次
2代表 “ 测试1”(b1,b)重复的只算一次。故 是 2
3代表 “测试3” (c1,c2,c3) 故是3.-----------------
FROM TAB
GROUP BY TCODE
,COUNT(1) 'column3',COUNT(DISTINCT T_time) 'column4'
FROM TB
GROUP BY T_NAME
join
(select t_name, count(1) as column4 from tb group by t_name, t_time) a
on tb.t_name = a.t_name
T_name 'column1',
SUM(ISNULL(T_code,0)) 'column2'
,COUNT(1) 'column3',
COUNT(DISTINCT T_time)'column4'
FROM TB
GROUP BY T_NAME
GO
CREATE TABLE TB(
T_ID INT
,T_NAME VARCHAR(50)
,T_CODE INT
,T_TIME VARCHAR(10)
)
INSERT INTO TB
SELECT 1 ,'测试', 10 ,'a' UNION ALL
SELECT 2 ,'测试1', 0 ,'b1' UNION ALL
SELECT 3 ,'测试1', 0 ,'b' UNION ALL
SELECT 4 ,'测试1', 0 ,'b1' UNION ALL
SELECT 5 ,'测试1', 0 ,'b' UNION ALL
SELECT 6 ,'测试1', 0 ,'b1' UNION ALL
SELECT 7 ,'测试1', 0 ,'b' UNION ALL
SELECT 8 ,'测试3', 10 ,'c2' UNION ALL
SELECT 9 ,'测试3', 20 ,'c3' UNION ALL
SELECT 10 ,'测试3', 30 ,'c1' SELECT T_name 'column1',SUM(ISNULL(T_code,0)) 'column2'
,COUNT(1) 'column3',COUNT(DISTINCT T_time) 'column4'
FROM TB
GROUP BY T_NAME/*
column1 column2 column3 column4
-------------------------------------------------- ----------- ----------- -----------
测试 10 1 1
测试1 0 6 2
测试3 60 3 3(3 行受影响)
*/
--> Author : wufeng4552
--> Date : 2009-11-17 08:48:28
if object_id('[tb]') is not null drop table [tb]
go
create table [tb] (T_id int,T_name nvarchar(6),T_code int,T_time nvarchar(4))
insert into [tb]
select 1,N'测试',10,'a' union all
select 2,N'测试1',0,'b1' union all
select 3,N'测试1',0,'b' union all
select 4,N'测试1',0,'b1' union all
select 5,N'测试1',0,'b' union all
select 6,N'测试1',0,'b1' union all
select 7,N'测试1',0,'b' union all
select 8,N'测试3',10,'c2' union all
select 9,N'测试3',20,'c3' union all
select 10,N'测试3',30,'c1'
select T_name column1,
sum(T_code)column2,
count(T_name)column3,
count(distinct T_time)column4
from tb group by T_name
/*
column1 column2 column3 column4
------- ----------- ----------- -----------
测试 10 1 1
测试1 0 6 2
测试3 60 3 3(3 個資料列受到影響)
*/
declare @tb table (T_id int,T_name varchar(5),T_code int,T_time varchar(2))
insert into @tb
select 1,'测试',10,'a' union all
select 2,'测试1',0,'b1' union all
select 3,'测试1',0,'b' union all
select 4,'测试1',0,'b1' union all
select 5,'测试1',0,'b' union all
select 6,'测试1',0,'b1' union all
select 7,'测试1',0,'b' union all
select 8,'测试3',10,'c2' union all
select 9,'测试3',20,'c3' union all
select 10,'测试3',30,'c1'select
column1=T_name,
column2=sum(t_code),
column3=count(*),
column4=count(distinct t_time)
from @tb
group by t_namecolumn1 column2 column3 column4
------- ----------- ----------- -----------
测试 10 1 1
测试1 0 6 2
测试3 60 3 3(3 行受影响)
T_id int,
T_name varchar(50),
T_code int,
T_time varchar(50))
Insert Into #t
Select 1, '测试', 10, 'a' Union All
Select 2, '测试1', 0, 'b1' Union All
Select 3, '测试1', 0, 'b' Union All
Select 4, '测试1', 0, 'b1' Union All
Select 5, '测试1', 0, 'b' Union All
Select 6, '测试1', 0, 'b1' Union All
Select 7, '测试1', 0, 'b' Union All
Select 8, '测试3', 10, 'c2' Union All
Select 9, '测试3', 20, 'c3' Union All
Select 10, '测试3', 30, 'c1' Select T_name As column1,
Sum(T_code) As column2,
Count(T_name) As Column3,
Count(Distinct T_time) As Column4
From #t
Group By T_name
SELECT T_NAME,SUM(T_CODE),COUNT(T_NAME),COUNT(DISTINCT T_TIME)
FROM TAB
GROUPBY T_NAME