解决方案 »
- 从SQL数据库查询,根据提供的值对某个字段匹配查询,但当此值为0时查全部,在存储过程中不用if,else,一条SQL语句能写下来吗?
- sql 表如何导出数据或者复制数据到excel表中啊?,尤其是时间
- 备份数据库的问题
- MSSQL 2005 express 安装出错,装不上数据库
- 在向一个有5万条数据的表中插入数据,如何保持唯一性?
- (急)数据库设计问题
- vs2008+sqlserver2005在建立与服务器的连接时出错。如何解决
- 在sql server 2005 express中如何实现自动备份数据库?
- 我是菜鸟,现在有一个简单的问题...
- 谁有Informix关于存储过程的资料?
- 如何选择主键
- 表中存在image类型字段,同时修改两张表的触发器应该如何写?
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);
--distinct
select isnull(颜色+',','') from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
) aa
set @sql=substring(@sql,1,len(@sql)-1)
return @sql
end
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);
--distinct
select @sql=isnull(颜色+',','') from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
) aa
set @sql=substring(@sql,1,len(@sql)-1)
return @sql
end
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);set @sql=''
--distinct
select @sql=@sql+ 颜色+',' from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
and 颜色 is not null---这里加个条件
) aa
set @sql=substring(@sql,1,len(@sql)-1)
return @sql
end
--级别也一样
create function getcolor
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);set @sql=''
--distinct
select @sql=@sql+ 颜色+',' from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
and 颜色 is not null---这里加个条件
) aa
set @sql=substring(@sql,1,len(@sql)-1)
return @sql
end
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40)select @sql=isnull(isnull(@sql+',','') + 颜色,@sql) from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
) aareturn @sql
end
go
select 商品名称, 型号,
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
isnull(min(级别),0) as 级别最小值,
isnull(max(级别),9999) as 级别最大值
from yourtablename group by 商品名称, 型号
order by 商品名称 desc, 型号
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
min(级别) as 级别最小值,
max(级别) as 级别最大值
from yourtablename where 级别<>0--这里group by 商品名称, 型号
order by 商品名称 desc, 型号
create function getcolor
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);set @sql=''
--distinct
select @sql=@sql+ isnull(颜色+',','') from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
) aa
set @sql=substring(@sql,1,len(@sql)-1)
return @sql
endselect 商品名称, 型号,
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
min(isnull(级别,9999)) as 级别最小值,
max(isnull(级别,0)) as 级别最大值
from yourtablename group by 商品名称, 型号
order by 商品名称 desc, 型号
A 0 5
A 2 0
A 4 9最后的记录的效果是级别最小值至级别最大值为 2-9,而不是0至9,所以用where级别<>0不行,因为等于0 的那条数据,可能还要参与其他逻辑。
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
min(case 级别 when 0 then null else 级别 end) as 级别最小值,
max(case 级别 when 0 then null else 级别 end) as 级别最大值
from yourtablename group by 商品名称, 型号
order by 商品名称 desc, 型号
你综合可用的颜色函数试下
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
级别最小值=(select min(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0),
级别最大值=(select max(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0)
from yourtablename awhere 级别<>0--这里group by 商品名称, 型号
order by 商品名称 desc, 型号
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
级别最小值=(select min(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0),
级别最大值=(select max(级别) from yourtablename where 商品名称=a.商品名称 and 型号=a.型号 and 级别<>0)
from yourtablename agroup by 商品名称, 型号
order by 商品名称 desc, 型号
参数2 int,库存 int,颜色 varchar(2),级别 int)
insert into yourtablename
select '手机','A',500,510,2,'红',1 union all
select '手机','A',515,530,4,'黄',3 union all
select '手机','B',540,560,4,null,2 union all
select '手机','B',570,585,4,'蓝',6 union all
select '手机','B',589,600,3,'黑',3 union all
select '手机','C',620,670,5,null,5 union all
select '手机','C',680,710,7,null,4 union all
select '手机','D',720,750,6,'黑',7 union all
select '电脑','A',111,119,1,'黑',4 union all
select '电脑','B',120,322,2,'黑',5 union all
select '电脑','B',330,340,4,'黑',3
--drop table yourtablename
大家注意一下,我稍微修改了一下数据,再用上面修改过的函数会有问题
create table yourtablename(商品名称 varchar(4),型号 varchar(1),参数1 int,
参数2 int,库存 int,颜色 varchar(2),级别 int)
insert into yourtablename
select '手机','A',500,510,2,'红',1 union all
select '手机','A',515,530,4,'黄',3 union all
select '手机','B',540,560,4,null,2 union all
select '手机','B',570,585,4,'蓝',6 union all
select '手机','B',589,600,3,'黑',3 union all
select '手机','C',620,670,5,null,5 union all
select '手机','C',680,710,7,null,4 union all
select '手机','D',720,750,6,'黑',7 union all
select '电脑','A',111,119,1,'黑',4 union all
select '电脑','B',120,322,2,'黑',5 union all
select '电脑','B',330,340,4,'黑',3
create function getcolor
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);set @sql=''
--distinct
select @sql=@sql+ 颜色+',' from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
and 颜色 is not null---这里加个条件
) aa
set @sql=substring(@sql,1,len(@sql)-1)
return @sql
end
select 商品名称, 型号,
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
min(级别) as 级别最小值,
max(级别) as 级别最大值
from yourtablename group by 商品名称, 型号
order by 商品名称 desc, 型号/*
商品名称 型号 参数1最小值 参数2最大值 种类 库存 颜色 级别最小值 级别最大值
---- ---- ----------- ----------- ----------- ----------- -------------------- ----------- -----------
手机 A 500 530 2 6 红,黄 1 3
手机 B 540 600 3 11 黑,蓝 2 6
(@商品名称 varchar(40),@型号 varchar(1))
returns varchar(20)
as
begin
declare @sql varchar(40);set @sql=''
--distinct
select @sql=@sql+ isnull(颜色,'无')+',' from (
select distinct 颜色 from yourtablename where
商品名称=@商品名称 and 型号=@型号
) aa
if len(@sql)>2
set @sql=replace(@sql,'无,','')
else
set @sql=replace(@sql,'无','')set @sql=substring(@sql,1,len(@sql)-1)
return @sql
end
这个你试了没?select 商品名称, 型号,
min(参数1) as 参数1最小值,
max(参数2) as 参数2最大值,
count(*) as 种类,
sum(库存) as 库存,
dbo.getcolor(商品名称, 型号) as 颜色,
min(isnull(级别,9999)) as 级别最小值,
max(isnull(级别,0)) as 级别最大值
from yourtablename group by 商品名称, 型号
order by 商品名称 desc, 型号