你要的是这个
set @step=(SELECT CHARINDEX(',', @str,num))
第一个参数是要查找的字符 第2个是个字符串 第3个是开始查找的位置
函数返回找到的位置如果没找到返回0
你可以把表中第2个字段值保存到变量里 用循环查找初始第3个参数为0 后面就为函数返回值+1 直到
函数返回0
把查找的位置用right(@str,len(@str)-@step)
就得到每段字符了 后面的插入不用说了吧
set @step=(SELECT CHARINDEX(',', @str,num))
第一个参数是要查找的字符 第2个是个字符串 第3个是开始查找的位置
函数返回找到的位置如果没找到返回0
你可以把表中第2个字段值保存到变量里 用循环查找初始第3个参数为0 后面就为函数返回值+1 直到
函数返回0
把查找的位置用right(@str,len(@str)-@step)
就得到每段字符了 后面的插入不用说了吧
值和前次的差作为长度 得到子字符串
create procedure f_GetNew
as
begin
create table #t(zhuohao int,col_1 varchar(3),col_2 varchar(3),col_3 varchar(3),col_4 varchar(3),col_5 varchar(3),col_6 varchar(3),col_7 varchar(3),col_8 varchar(3),col_9 varchar(3),col_10 varchar(3),col_11 varchar(3),col_12 varchar(3),col_13 varchar(3),col_14 varchar(3),col_15 varchar(3))
declare @i int,@count int,@sql varchar(8000),@s varchar(100),@zhuohao int
declare c_t_a cursor for select zhuohao,caidanhao from t_a
open c_t_a
fetch next from c_t_a into @zhuohao,@s
while @@fetch_status=0
begin
select @i=0,@count=len(@s)-len(replace(@s,',','')),@sql='ZhuoHao='+cast(@zhuohao as varchar(10))
while @i<@count
begin
set @sql=@sql+',Col_'+cast(@i+1 as varchar(10))+'='''+substring(@s,1,charindex(',',@s)-1)+''''
if charindex(',',@s)=0 break
set @s=substring(@s,charindex(',',@s)+1,len(@s)-charindex(',',@s))
set @i=@i+1
end
set @sql=@sql+',Col_'+cast(@i+1 as varchar(10))+'='''+@s+''''
while @i<15-1
begin
set @i=@i+1
set @sql=@sql+',Col_'+cast(@i+1 as varchar(10))+'='''''
end
set @sql='insert into #t select ' + @sql
exec(@sql)
fetch next from c_t_a into @zhuohao,@s
end
close c_t_a
deallocate c_t_a
select * from #t
endexec dbo.f_getNew
create table t_a (zhuohao int,caidanhao varchar(100))
insert t_a
select 12, '123,104' union all
select 13, '103,105,106 ' union all
select 14, '109,189,178,198'
CREATE PROCEDURE [diancai] @zhuohao int
AS
declare @caidanhao varchar(70)
declare @at int
declare @ar int
declare @cai1 int
declare @cai2 int
declare @cai3 int
declare @cai4 int
declare @cai5 int
declare @cai6 int
declare @cai7 int
declare @cai8 int
declare @cai9 int
declare @cai10 int
declare @cai11 int
declare @cai12 int
declare @cai13 int
declare @cai14 int
declare @cai15 intset @at = 1
set @caidanhao = (select caidanhao from a
where zhuohao = @zhuohao and flag = 0)while @at <= 15
begindeclare @i smallint
set @i = ( @at - 1)*4 + 1
set @ar = substring(@caidanhao,@i,3)if @at = 1
set @cai1 = @ar
if @at =2
set @cai2 = @ar
if @at =3
set @cai3 = @ar
if @at =4
set @cai4 = @ar
if @at =5
set @cai5 = @ar
if @at =6
set @cai6 = @ar
if @at =7
set @cai7 = @ar
if @at =8
set @cai8 = @ar
if @at =9
set @cai9 = @ar
if @at =10
set @cai10 = @ar
if @at =11
set @cai11 = @ar
if @at =12
set @cai12 = @ar
if @at =13
set @cai13 = @ar
if @at =14
set @cai14 = @ar
if @at =15
set @cai15 = @arset @at = @at+1endinsert c
(zhuohao,cai1,cai2,cai3,cai4,cai5,cai6,cai7,cai8,cai9,cai10,cai11,cai12,cai13,cai14,cai15)
values (@zhuohao,@cai1,@cai2,@cai3,@cai4,@cai5,@cai6,@cai7,@cai8,@cai9,@cai10,@cai11,@cai12,@cai13,@cai14,@cai15)update a set flag = 1 where zhuohao = @zhuohaoGO
(
流水号 int,
菜号 int,
菜单 nvarchar(10),
数量 int
)
insert into #流水帐 values (1,1,'A1',2)
insert into #流水帐 values (2,1,'A1',1)
insert into #流水帐 values (2,2,'A2',3)
insert into #流水帐 values (3,1,'A1',1)
insert into #流水帐 values (3,2,'A2',1)
insert into #流水帐 values (3,3,'A3',1)
insert into #流水帐 values (3,4,'A4',5)
insert into #流水帐 values (4,1,'A1',1)
insert into #流水帐 values (4,2,'A2',1)
insert into #流水帐 values (4,3,'A3',1)
insert into #流水帐 values (4,4,'A4',4)
insert into #流水帐 values (4,5,'C1',1)
insert into #流水帐 values (4,6,'C2',1)
insert into #流水帐 values (5,1,'A1',1)
insert into #流水帐 values (5,2,'A2',2)
insert into #流水帐 values (5,3,'A3',1)
insert into #流水帐 values (5,4,'A4',1)
insert into #流水帐 values (5,5,'B1',1)
insert into #流水帐 values (5,6,'B2',1)
insert into #流水帐 values (5,7,'C3',1)
insert into #流水帐 values (5,8,'C4',1)
insert into #流水帐 values (5,9,'C1',1)
insert into #流水帐 values (5,10,'C2',1)
insert into #流水帐 values (6,1,'A1',1)
insert into #流水帐 values (6,2,'A2',1)
insert into #流水帐 values (6,3,'A3',1)
insert into #流水帐 values (6,4,'A4',5)create table #翻桌帐
(
流水号 int,
桌号 int,
人数 int,
日期 smalldatetime
)
insert into #翻桌帐 values (1,1,8,'2005-01-01 12:00:00')
insert into #翻桌帐 values (2,2,5,'2005-01-01 12:10:00')
insert into #翻桌帐 values (3,3,6,'2005-01-02 12:10:00')
insert into #翻桌帐 values (4,4,7,'2005-01-02 12:10:00')
insert into #翻桌帐 values (5,2,8,'2005-01-02 17:10:00')
insert into #翻桌帐 values (6,4,9,'2005-01-03 18:10:00')create table #菜单
(
菜单 nvarchar(10),
菜名 nvarchar(10),
价格 decimal(5,2)
)
insert into #菜单 values ('A1','菜1',10.00)
insert into #菜单 values ('A2','菜2',20.00)
insert into #菜单 values ('A3','菜3',30.00)
insert into #菜单 values ('A4','菜4',40.00)
insert into #菜单 values ('A5','菜5',50.00)
insert into #菜单 values ('B1','菜6',16.00)
insert into #菜单 values ('B2','菜7',17.00)
insert into #菜单 values ('B3','菜8',18.00)
insert into #菜单 values ('B4','菜9',19.00)
insert into #菜单 values ('B5','菜10',20.00)
insert into #菜单 values ('C1','菜11',21.00)
insert into #菜单 values ('C2','菜12',22.00)
insert into #菜单 values ('C3','菜13',23.00)
insert into #菜单 values ('C4','菜14',24.00)
insert into #菜单 values ('C5','菜15',25.00)
select
a.流水号,
c.日期,
c.桌号,
c.人数,
sum(b.价格*a.数量) 总价,
sum(a.数量) 数量,
min(case when a.菜号 = 1 then a.数量 else null end) '数量1',
min(case when a.菜号 = 1 then b.菜名 else null end) '菜名1',
min(case when a.菜号 = 1 then b.价格 else null end) '价格1',
min(case when a.菜号 = 2 then a.数量 else null end) '数量2',
min(case when a.菜号 = 2 then b.菜名 else null end) '菜名2',
min(case when a.菜号 = 2 then b.价格 else null end) '价格2',
min(case when a.菜号 = 3 then a.数量 else null end) '数量3',
min(case when a.菜号 = 3 then b.菜名 else null end) '菜名3',
min(case when a.菜号 = 3 then b.价格 else null end) '价格3',
min(case when a.菜号 = 4 then a.数量 else null end) '数量4',
min(case when a.菜号 = 4 then b.菜名 else null end) '菜名4',
min(case when a.菜号 = 4 then b.价格 else null end) '价格4',
min(case when a.菜号 = 5 then a.数量 else null end) '数量5',
min(case when a.菜号 = 5 then b.菜名 else null end) '菜名5',
min(case when a.菜号 = 5 then b.价格 else null end) '价格5',
min(case when a.菜号 = 6 then a.数量 else null end) '数量6',
min(case when a.菜号 = 6 then b.菜名 else null end) '菜名6',
min(case when a.菜号 = 6 then b.价格 else null end) '价格6',
min(case when a.菜号 = 7 then a.数量 else null end) '数量7',
min(case when a.菜号 = 7 then b.菜名 else null end) '菜名7',
min(case when a.菜号 = 7 then b.价格 else null end) '价格7',
min(case when a.菜号 = 8 then a.数量 else null end) '数量8',
min(case when a.菜号 = 8 then b.菜名 else null end) '菜名8',
min(case when a.菜号 = 8 then b.价格 else null end) '价格8',
min(case when a.菜号 = 9 then a.数量 else null end) '数量9',
min(case when a.菜号 = 9 then b.菜名 else null end) '菜名9',
min(case when a.菜号 = 9 then b.价格 else null end) '价格9',
min(case when a.菜号 = 10 then a.数量 else null end) '数量10',
min(case when a.菜号 = 10 then b.菜名 else null end) '菜名10',
min(case when a.菜号 = 10 then b.价格 else null end) '价格10'
from #流水帐 a
inner join #菜单 b ON a.菜单 = b.菜单
inner join #翻桌帐 c ON a.流水号 = c.流水号
group by a.流水号,c.日期,c.桌号,c.人数
order by c.日期 desc ,c.桌号
drop table #翻桌帐
drop table #流水帐
drop table #菜单