以下是预约表
-----------------------------------------------------------
预约人 同乘人数 班次 预约时间 备注
刘洪 1 1 2007-04-09 00:00:00 NULL
刘二 1 2 2007-04-09 00:00:00 NULL
张三 0 3 2007-04-09 00:00:00 NULL
李四 0 4 2007-04-09 00:00:00 NULL
王五 1 3 2007-04-09 00:00:00 NULL
周六 1 1 2007-04-09 00:00:00 NULL
admin 1 2 2007-04-09 00:00:00 NULL
-------------------------------------------------------------
希望得到以下这个表
---------------------------------------------------------------------
预约人 同乘人数 总人数 班次 预约时间 备注
刘洪 周六 刘洪(1) 周六(1) 4 1 2007-04-09 NULL
刘二 admin 刘二(1) admin(1) 2 2 2007-04-09 NULL
张三 王五 张三(0) 王五(1) 3 3 2007-04-09 NULL
李四 李四(0) 1 4 2007-04-09 NULL
-----------------------------------------------------------------------
条件:按照班次分组,将预约相同班次的预约人合并到一个字段并用空格分开,同时将每个预约人
所带同乘者人数附后并用括号括起来,总人数=预约人+同乘人数。预约时间只取最近的日期相同的
日期部分,不取时间。不知道我说明白了没有,在线等!
-----------------------------------------------------------
预约人 同乘人数 班次 预约时间 备注
刘洪 1 1 2007-04-09 00:00:00 NULL
刘二 1 2 2007-04-09 00:00:00 NULL
张三 0 3 2007-04-09 00:00:00 NULL
李四 0 4 2007-04-09 00:00:00 NULL
王五 1 3 2007-04-09 00:00:00 NULL
周六 1 1 2007-04-09 00:00:00 NULL
admin 1 2 2007-04-09 00:00:00 NULL
-------------------------------------------------------------
希望得到以下这个表
---------------------------------------------------------------------
预约人 同乘人数 总人数 班次 预约时间 备注
刘洪 周六 刘洪(1) 周六(1) 4 1 2007-04-09 NULL
刘二 admin 刘二(1) admin(1) 2 2 2007-04-09 NULL
张三 王五 张三(0) 王五(1) 3 3 2007-04-09 NULL
李四 李四(0) 1 4 2007-04-09 NULL
-----------------------------------------------------------------------
条件:按照班次分组,将预约相同班次的预约人合并到一个字段并用空格分开,同时将每个预约人
所带同乘者人数附后并用括号括起来,总人数=预约人+同乘人数。预约时间只取最近的日期相同的
日期部分,不取时间。不知道我说明白了没有,在线等!
group by 班次 order by 班次关注一下
不过想问下
刘二 admin 刘二(1) admin(1) 2 2 2007-04-09 NULL那个总人数是2???
是不是该是4啊???按你说的
总人数=预约人+同乘人数
--建表
create table mytest
(
mname varchar(50),
num int,
part int
)insert into mytest(mname,num,part) values('刘洪',1,1);
insert into mytest(mname,num,part) values('刘二',1,2);
insert into mytest(mname,num,part) values('张三',0,3);
insert into mytest(mname,num,part) values('李四',0,4);
insert into mytest(mname,num,part) values('王五',1,3);
insert into mytest(mname,num,part) values('周六',1,1);
insert into mytest(mname,num,part) values('admin',1,2);--建立两个合并字符串的函数
IF EXISTS (SELECT *
FROM sysobjects
WHERE name = 'FN_GetNames_For_Test')
DROP FUNCTION FN_GetNames_For_Test
GO
CREATE FUNCTION dbo.FN_GetNames_For_Test(@p_part int)
RETURNS VARCHAR(100) AS
BEGIN
DECLARE @ReturnValue VARCHAR(100)
DECLARE @mname VARCHAR(30)
DECLARE names_cursor CURSOR FOR
SELECT mname FROM mytest WHERE part=@p_part SET @ReturnValue = '' OPEN names_cursor FETCH NEXT FROM names_cursor INTO @mname
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ReturnValue = @ReturnValue + @mname + ' '
FETCH NEXT FROM names_cursor INTO @mname
END
CLOSE names_cursor RETURN @ReturnValue
END
GOIF EXISTS (SELECT *
FROM sysobjects
WHERE name = 'FN_GetNames_For_Test2')
DROP FUNCTION FN_GetNames_For_Test2
GO
CREATE FUNCTION dbo.FN_GetNames_For_Test2(@p_part int)
RETURNS VARCHAR(100) AS
BEGIN
DECLARE @ReturnValue VARCHAR(100)
DECLARE @mname VARCHAR(30)
DECLARE @num int
DECLARE names_cursor CURSOR FOR
SELECT mname,num FROM mytest WHERE part=@p_part SET @ReturnValue = '' OPEN names_cursor FETCH NEXT FROM names_cursor INTO @mname,@num
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ReturnValue = @ReturnValue + @mname + '(' + convert(varchar,@num) + ')' + ' '
FETCH NEXT FROM names_cursor INTO @mname,@num
END
CLOSE names_cursor RETURN @ReturnValue
END
GO--应用
select
dbo.FN_GetNames_For_Test(part),
dbo.FN_GetNames_For_Test2(part),
part,
sum(1+isnull(num,0))
from mytest
group by
dbo.FN_GetNames_For_Test(part),
dbo.FN_GetNames_For_Test2(part),
partorder by part--结果
刘洪 周六 刘洪(1) 周六(1) 1 4
刘二 admin 刘二(1) admin(1) 2 4
张三 王五 张三(0) 王五(1) 3 3
李四 李四(0) 4 1