有这样一个问题:
数据库中有两张表,字段分别如下:
Coppers表:
列名 数据类型 长度 允许空
ID int 4 //自增列
MoldId varchar 64 //模号
WorkpieceId varchar 64 //工件编号
CopperId varchar 64 //铜公编号
BurstCopper int 4 Y //爆公数量
RoughCopper int 4 Y //粗公数量
ChildrenCopper int 4 Y //幼公数量
Remark varchar 64 Y //备注
SendReferenceTime Datetime 8 Y //派发文控时间
Processes表:
列名
ID 数据类型 长度 允许空 //自增列
SequenceId int 4 //工序编号
MoldId varchar 64 //模号
WorkpieceId varchar 64 //工件编号
CopperId varchar 64 //铜公编号
ProcessType varchar 64 //加工类型:CNC\车床\ 铣床
//线切割\雕刻\执模\EDM
State int 4 //工序状态
两张表对应的关系:
一个铜公可以有多道加工工序,比如,一个铜公可以经过CNC、车床、铣床、线切割、雕刻、执模、EDM等多道工序完成。
界面要求如下:
模号 工件 铜公 爆公数量 粗公数量 幼公数量 CNC 车床 铣床 线切割 雕刻 执模 EDM
实现:采用dotnet下面的datagrid实现。
问题如下:
怎么样才能使得Processes表的行横过来与Coppers表中的行组成新的行?
如果"加工类型"固定只有以上几种类型,用如下SQL语句即可:
------------------------------------------------------------------------
select
模号 = a.MoldId,
工件 = a.WorkpieceId,
铜公 = a.CopperId,
爆公数量 = a.BurstCopper,
粗公数量 = a.RoughCopper,
幼公数量 = a.ChildrenCopper,
CNC = max(case ProcessType when CNC then State end),
车床 = max(case ProcessType when 车床 then State end),
铣床 = max(case ProcessType when 铣床 then State end),
线切割 = max(case ProcessType when 线切割 then State end),
雕刻 = max(case ProcessType when 雕刻 then State end),
执模 = max(case ProcessType when 执模 then State end),
EDM = max(case ProcessType when EDM then State end)
from
Coppers a
inner join
Processes b
on
a.MoldId = b.MoldId
group by
a.MoldId,a.WorkpieceId,a.CopperId,a.BurstCopper,a.RoughCopper,a.ChildrenCopper
原理就是:你要横过来的列通过case来增加。
如果是固定的。则直接写sql语句就可以实现。
如果不固定,需要动态组织sql语句,把动的变成固定的。
楼上写的已经很详细。