有两个表:
表一(工序名)
OrderID OrderName
01 工序1
02 工序2
03 工序3
................表二(生产状态)
ID OrderID ....... iState(状态)
0001 01 完成
0001 02 加工中
0001 03 待加工
0002 01 待加工
0002 02 待加工
0002 03 待加工要显示效果 产品号 工序1 工序2 工序3 .......... 工序N
0001 完成 加工 待加工
0002 待加工 待加工 待加工
.......
表一(工序名)
OrderID OrderName
01 工序1
02 工序2
03 工序3
................表二(生产状态)
ID OrderID ....... iState(状态)
0001 01 完成
0001 02 加工中
0001 03 待加工
0002 01 待加工
0002 02 待加工
0002 03 待加工要显示效果 产品号 工序1 工序2 工序3 .......... 工序N
0001 完成 加工 待加工
0002 待加工 待加工 待加工
.......
解决方案 »
- 一个关于统计的问题
- 为什么access数据库查询总是报错:操作必须使用一个可更新的查询。
- 这个查询怎么写
- mdf,ndf和ldf的作用?
- Wrong SQL statement at the follow. How to correct it?
- MSSQl 多表连接查询,分页,排序 的问题(急)
- SQL 行列转换联查 求教高手
- 从没见过这样的问题,在线等。
- SQL SERVER安装时老是提示配置数据库失败,安装不上,请问如何解决?在线等待.....
- sqlserver表连接怎么做,连接后可以同步更新数据吗?
- 使用Log Explorer中的2个疑问
- SQL SERVER 连接问题,能ping通服务器,但是连不上?
create table #1(orderid char(2),ordername varchar(20))
create table #2(id char(4),orderid char(2),istate varchar(20))insert into #1
select '01','工序1' union
select '02','工序2' union
select '03','工序3' insert into #2
select '0001','01','完成' union
select '0001','02','加工中' union
select '0001','03','待加工' union
select '0002','01','待加工' union
select '0002','02','待加工' union
select '0002','03','待加工' --处理
declare @sql varchar(8000)
select @sql=''
select @sql=@sql+',['+ordername+']=max(case OrderID when '''+OrderID+''' then iState else '''' end)'
from #1
group by OrderID,ordernameexec('select ID'+@sql+' from #2 group by ID')--删除测试表
drop table #1
drop table #2--结果
/*
id 工序1 工序2 工序3
0001 完成 加工中 待加工
0002 待加工 待加工 待加工
*/
--处理
declare @sql varchar(8000)
select @sql=''
select @sql=@sql+',['+a.ordername+']=max(case OrderID when '''+a.OrderID+''' then iState else '''' end)'
from #1 a,#2 b
where a.orderid=b.orderid
group by a.OrderID,a.ordernameexec('select ID'+@sql+' from #2 group by ID')
另外,假如我用iState=1代表完工 iState=2代表加工中 iState=3代表待加工
这里表二的内容为:
ID OrderID ....... iState(状态)
0001 01 1
0001 02 2
0001 03 3
0002 01 3
0002 02 3
0002 03 3
如何显示成产品号 工序1 工序2 工序3 .......... 工序N
0001 完成 加工 待加工
0002 待加工 待加工 待加工
.......
create table #2(id char(4),orderid char(2),istate varchar(20))insert into #1
select '01','工序1' union
select '02','工序2' union
select '03','工序3' insert into #2
select '0001','01','1' union
select '0001','02','2' union
select '0001','03','3' union
select '0002','01','3' union
select '0002','02','3' union
select '0002','03','3' --处理
declare @sql varchar(8000)
select @sql=''
select @sql=@sql+',['+a.ordername+']=case max(case OrderID when '''+a.OrderID+''' then iState else '''' end) when ''1'' then ''完成'' when ''2'' then ''加工中'' when ''3'' then ''待加工'' end'
from #1 a,#2 b
where a.orderid=b.orderid
group by a.OrderID,a.ordernameexec('select ID'+@sql+' from #2 group by ID')
--删除测试表drop table #1
drop table #2
--结果
/*
id 工序1 工序2 工序3
0001 完成 加工中 待加工
0002 待加工 待加工 待加工
*/
原来Case可以嵌套使用