怎么做一个这样的功能:
数据库中的数据是这样的:
产品名 销售数量
A 2
B 3
C 4
D 5
。 。
。 。
。 。
现在我想统计一下他们之间的关系,统计出来的结果如下:
A B C D
A 2/2 2/3 2/4 2/5B 3/2 3/3 3/4 3/5C 4/2 4/3 4/4 4/5D 5/2 5/3 5/4 5/5
。 ...
。 ...
。 ...
就是他们之间的连带关系,请高手给各提示?
数据库中的数据是这样的:
产品名 销售数量
A 2
B 3
C 4
D 5
。 。
。 。
。 。
现在我想统计一下他们之间的关系,统计出来的结果如下:
A B C D
A 2/2 2/3 2/4 2/5B 3/2 3/3 3/4 3/5C 4/2 4/3 4/4 4/5D 5/2 5/3 5/4 5/5
。 ...
。 ...
。 ...
就是他们之间的连带关系,请高手给各提示?
select
my_sum(case when b.产品名='a' then b.产品名 end,a.产品名)[a],
my_sum(case when b.产品名='b' then b.产品名 end,a.产品名)[b],
my_sum(case when b.产品名='c' then b.产品名 end,a.产品名)[c],
my_sum(case when b.产品名='d' then b.产品名 end,a.产品名)[d],
my_sum(case when b.产品名='e' then b.产品名 end,a.产品名)[e],
...
from biao a,biao b
group by a.产品名
create table test(name varchar(10),num int)
insert into test select 'A',2
insert into test select 'B',3
insert into test select 'C',4
insert into test select 'D',5select
max(case when b.name='a' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [a],
max(case when b.name='b' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [b],
max(case when b.name='c' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [c],
max(case when b.name='d' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [d]
from test a,test b
group by a.name
2/2 2/3 2/4 2/5
3/2 3/3 3/4 3/5
4/2 4/3 4/4 4/5
5/2 5/3 5/4 5/5
--删除测试:
drop table test
select a.name,
max(case when b.name='a' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [A],
max(case when b.name='b' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [B],
max(case when b.name='c' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [C],
max(case when b.name='d' then cast(a.num as varchar)+'/'+cast(b.num as varchar) end) [D]
from test a,test b
group by a.name
还有点问题,我现在产品如果很多的话,必须这样一条条的写吗,能不能用循环或者是变量什么的,就是更简单一点的语句?麻烦specialsoldier(雪地撒野)再给讲解讲解。
-----------------
这个不行 ,行编号只是sql给你显示结果集时辅助数据,并不包括再结果集中.所以改了也没用,也改不了.
我现在的第一列就可以用了
declare @sql varchar(8000),@tbName varchar(40)
set @tbName = 'test'--这里填你的表名
set @sql = 'select a.name, '
select @sql = @sql +' max(case when b.name='''+a.name+''' then cast(a.num as varchar)+''/''+cast(b.num as varchar) end) ['+a.name+'],'
from (
select name from test
group by name
)a
set @sql=left(@sql,len(@sql)-1)
set @sql=@sql+' from '+@tbName+' a,'+@tbName+' b group by a.name'
--select @sql--查看最终的语句
exec(@sql)
-----------测试表还是上面的test,结果相同.
回去睡觉,下午再来看~
没有 WHERE 子句的交叉联接将产生联接所涉及的表的笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。
select a=a.销售数量,b.销售数量 from tablename a cross join (select 销售数量 from tablename) b order by a
select max(a)
from(
select 1 a union select 2 a union select 3 a)ss
结果:3
表1 表2
产品名 销售数量 产品名 销售数量
A 2 甲 4
B 3 乙 5
。 。 。 。
。 。 。 。
。 。 。 。看看能不能得到类似上述的效果:
统计出来的结果如下:
甲 乙
A 2/4 2/5 B 3/4 3/5
。 ...
。 ...
。 ...