当前位置:主页>仓库管理软件> 列表

SQLSERVER中实现此查询,请大侠帮忙 找济南进销存管理软件

财务软件版1楼: 表结构:
样品编号 项目 检测结果
001    铜  0.02   
001    铁 0.04
003    铝 0.04
004    钠 0.08

要求:
样品编号 项目一  项目二  项目三 项目四 项目五
"样品编号" "铜"   "铁"   null  null null
"001" "0.02" "0.04" null null null
"样品编号" "铝"   "样品编号" "钠"  null null
"003" "0.04" "004" "0.08" null null

2楼: 帮帮忙吧,老大。 如人事管理免费软件

3楼: 这个是交叉表问题,下面是最典型的例子:

行列转换--交叉表

假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82

想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82

declare @sql varchar(4000)


set @sql = ''select Name''
select @sql = @sql + '',sum(case Subject when ''''''+Subject+'''''' then Result end) [''+Subject+'']''
from (select distinct Subject from CJ) as a
select @sql = @sql+'' from test group by name''
exec(@sql)

4楼: 我只有5列,可能100个项目,怎么处理,交叉表能处理吗?

5楼: 想了半天,非常郁闷!此题无解

6楼: 无解吗?查询出来的结果应该是有规律的呀。
我比较菜,写不出来!

财务软件版7楼: 更正一下,结果应该是这样:
样品编号 项目一  项目二  项目三 项目四 项目五
"样品编号" "铜"   "铁"   null  null null
"001" "0.02" "0.04" null null null
"样品编号" "铝"   "样品编号" "钠"  null null
"003" "0.04" "004" "0.08" null null

8楼: drop table #temp
drop table #temp1
go

Select 样品编号,项目,检测结果,identity(int,1,1) as tmp into #temp from T3367338 order by 样品编号,项目
go

Select 样品编号,项目,检测结果,(Select count(*)+1 from #temp


where 样品编号=AA.样品编号 and tmpinto #temp1
From #temp AA
go

Select 样品编号1,项目1,项目2,项目3,项目4,项目5
From (Select Distinct 样品编号,''样品编号'' as 样品编号1,
(Select 项目 From #temp1 where 样品编号=AA.样品编号 and tmp=1) as 项目1,
(Select 项目 From #temp1 where 样品编号=AA.样品编号 and tmp=2) as 项目2,
(Select 项目 From #temp1 where 样品编号=AA.样品编号 and tmp=3) as 项目3,
(Select 项目 From #temp1 where 样品编号=AA.样品编号 and tmp=4) as 项目4,
(Select 项目 From #temp1 where 样品编号=AA.样品编号 and tmp=5) as 项目5,0 as tmp
From #temp1 AA
Union all
Select Distinct 样品编号,样品编号,
(Select cast(检测结果 as char) From #temp1 where 样品编号=AA.样品编号 and tmp=1),
(Select cast(检测结果 as char) From #temp1 where 样品编号=AA.样品编号 and tmp=2),
(Select cast(检测结果 as char) From #temp1 where 样品编号=AA.样品编号 and tmp=3),

(Select cast(检测结果 as char) From #temp1 where 样品编号=AA.样品编号 and tmp=4),
(Select cast(检测结果 as char) From #temp1 where 样品编号=AA.样品编号 and tmp=5),1 as tmp
From #temp1 AA) BB
Order by 样品编号,tmp

9楼: 楼上的大哥的做法解决不了问题。

10楼: 看不明白那要求是什么

11楼: 不明白你样品编号001在一行而003,004这两个又在一行。如果以样品编号分类。001,003,004各自占一行可能好些。。
001。 。。
003。 。。
004。 。。

12楼: 没规律用脚本就没法实现,换思路吧。 如济南进销存管理软件

13楼: 使用游标,循环构造出交叉表语句