工序表:
ID 工序编号 工序名称
1 GX01 下料
2 GX02 打弯
3 GX03 冲孔员工表:
ID 员工编号 员工姓名
1 YG01 张三
2 YG02 李四
3 YG93 王五加工表:
ID 生产单号 物品编码 员工编号 工序编号 数量
1 SC01 X01 YG01 GX01 10
2 SC01 X01 YG02 GX02 10
3 SC01 X01 YG03 GX03 9
现在要弄成这样的格式:
ID 生产单号 物品编码 下料数量 下料人员 打弯数量 打弯人员 冲孔数量 冲孔人员
1 SC01 X01 10 张三 10 李四 9 王五
请问各位高手,有什么好的办法吗?
ID 工序编号 工序名称
1 GX01 下料
2 GX02 打弯
3 GX03 冲孔员工表:
ID 员工编号 员工姓名
1 YG01 张三
2 YG02 李四
3 YG93 王五加工表:
ID 生产单号 物品编码 员工编号 工序编号 数量
1 SC01 X01 YG01 GX01 10
2 SC01 X01 YG02 GX02 10
3 SC01 X01 YG03 GX03 9
现在要弄成这样的格式:
ID 生产单号 物品编码 下料数量 下料人员 打弯数量 打弯人员 冲孔数量 冲孔人员
1 SC01 X01 10 张三 10 李四 9 王五
请问各位高手,有什么好的办法吗?
left join
a.id,
c.生产单号.
c.物品编码,
c.数量 as 下料数量,
b.员工姓名 as 下料人员,
c.数量 as 打弯数量,
b.员工姓名 as 打弯人员,
c.数量 as 冲孔数量,
b.员工姓名 as 冲孔人员
from
工序表 a,员工表 b,加工表 c
where
a.id=b.id and b.id=c.id and a.工序编号=c.工序编号 and b.员工编号=c.员工编号
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================IF OBJECT_ID('工序表') IS NOT NULL
DROP TABLE 工序表
GO
CREATE TABLE 工序表(ID int, 工序编号 varchar(10),工序名称 varchar(10) )
insert 工序表 SELECT
1 , 'GX01' , '下料' UNION ALL SELECT
2 , 'GX02' , '打弯' UNION ALL SELECT
3 , 'GX03', '冲孔'
go
IF OBJECT_ID('员工表') IS NOT NULL
DROP TABLE 员工表
GO
CREATE TABLE 员工表(ID int, 员工编号 varchar(10),员工姓名 varchar(10) )
insert 员工表 SELECT
1, 'YG01', '张三' UNION ALL SELECT
2, 'YG02', '李四' UNION ALL SELECT
3 , 'YG03', '王五'
go
IF OBJECT_ID('加工表') IS NOT NULL
DROP TABLE 加工表
GO
CREATE TABLE 加工表(ID int, 生产单号 varchar(10),物品编码 varchar(10),员工编号 varchar(10), 工序编号 varchar(10), 数量 int)
insert 加工表 SELECT
1 , 'SC01' , 'X01' , 'YG01' , 'GX01' , 10 UNION ALL SELECT
2 , 'SC01' , 'X01' , 'YG02' , 'GX02' , 10 UNION ALL SELECT
3 , 'SC01' , 'X01' , 'YG03' , 'GX03' , 9
go
select
生产单号,
物品编码 ,
下料数量=max(case when g.工序名称='下料' then 数量 else 0 end) ,
下料人员=MAX(case when g.工序名称='下料' then 员工姓名 else '' end),
打弯数量=max(case when g.工序名称='打弯' then 数量 else 0 end) ,
打弯人员=MAX(case when g.工序名称='打弯' then 员工姓名 else '' end),
冲孔数量=max(case when g.工序名称='冲孔' then 数量 else 0 end) ,
冲孔人员 =MAX(case when g.工序名称='冲孔' then 员工姓名 else '' end)from 加工表 j join 员工表 y on j.员工编号=y.员工编号 join 工序表 g on j.工序编号=g.工序编号
group by 生产单号 , 物品编码 /*
生产单号 物品编码 下料数量 下料人员 打弯数量 打弯人员 冲孔数量 冲孔人员
SC01 X01 10 张三 10 李四 9 王五
*/
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================IF OBJECT_ID('工序表') IS NOT NULL
DROP TABLE 工序表
GO
CREATE TABLE 工序表(ID int, 工序编号 varchar(10),工序名称 varchar(10) )
insert 工序表 SELECT
1 , 'GX01' , '下料' UNION ALL SELECT
2 , 'GX02' , '打弯' UNION ALL SELECT
3 , 'GX03', '冲孔'
go
IF OBJECT_ID('员工表') IS NOT NULL
DROP TABLE 员工表
GO
CREATE TABLE 员工表(ID int, 员工编号 varchar(10),员工姓名 varchar(10) )
insert 员工表 SELECT
1, 'YG01', '张三' UNION ALL SELECT
2, 'YG02', '李四' UNION ALL SELECT
3 , 'YG03', '王五'
go
IF OBJECT_ID('加工表') IS NOT NULL
DROP TABLE 加工表
GO
CREATE TABLE 加工表(ID int, 生产单号 varchar(10),物品编码 varchar(10),员工编号 varchar(10), 工序编号 varchar(10), 数量 int)
insert 加工表 SELECT
1 , 'SC01' , 'X01' , 'YG01' , 'GX01' , 10 UNION ALL SELECT
2 , 'SC01' , 'X01' , 'YG02' , 'GX02' , 10 UNION ALL SELECT
3 , 'SC01' , 'X01' , 'YG03' , 'GX03' , 9
go
select
ID=MIN(j.ID),
生产单号,
物品编码 ,
下料数量=max(case when g.工序名称='下料' then 数量 else 0 end) ,
下料人员=MAX(case when g.工序名称='下料' then 员工姓名 else '' end),
打弯数量=max(case when g.工序名称='打弯' then 数量 else 0 end) ,
打弯人员=MAX(case when g.工序名称='打弯' then 员工姓名 else '' end),
冲孔数量=max(case when g.工序名称='冲孔' then 数量 else 0 end) ,
冲孔人员 =MAX(case when g.工序名称='冲孔' then 员工姓名 else '' end)from 加工表 j join 员工表 y on j.员工编号=y.员工编号 join 工序表 g on j.工序编号=g.工序编号
group by 生产单号 , 物品编码 /*
ID 生产单号 物品编码 下料数量 下料人员 打弯数量 打弯人员 冲孔数量 冲孔人员
----------- ---------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
1 SC01 X01 10 张三 10 李四 9 王五
-- -----------t_mac 小编-------------------
--------------------希望有天成为大虾----
-- =========================================IF OBJECT_ID('工序表') IS NOT NULL
DROP TABLE 工序表
GO
CREATE TABLE 工序表(ID int, 工序编号 varchar(10),工序名称 varchar(10) )
insert 工序表 SELECT
1 , 'GX01' , '下料' UNION ALL SELECT
2 , 'GX02' , '打弯' UNION ALL SELECT
3 , 'GX03', '冲孔'
go
IF OBJECT_ID('员工表') IS NOT NULL
DROP TABLE 员工表
GO
CREATE TABLE 员工表(ID int, 员工编号 varchar(10),员工姓名 varchar(10) )
insert 员工表 SELECT
1, 'YG01', '张三' UNION ALL SELECT
2, 'YG02', '李四' UNION ALL SELECT
3 , 'YG03', '王五'
go
IF OBJECT_ID('加工表') IS NOT NULL
DROP TABLE 加工表
GO
CREATE TABLE 加工表(ID int, 生产单号 varchar(10),物品编码 varchar(10),员工编号 varchar(10), 工序编号 varchar(10), 数量 int)
insert 加工表 SELECT
1 , 'SC01' , 'X01' , 'YG01' , 'GX01' , 10 UNION ALL SELECT
2 , 'SC01' , 'X01' , 'YG02' , 'GX02' , 10 UNION ALL SELECT
3 , 'SC01' , 'X01' , 'YG03' , 'GX03' , 9
go
select
ID=MIN(j.ID),
生产单号,
物品编码 ,
下料数量=sum(case when g.工序名称='下料' then 数量 else 0 end) ,
下料人员=MAX(case when g.工序名称='下料' then 员工姓名 else '' end),
打弯数量=sum(case when g.工序名称='打弯' then 数量 else 0 end) ,
打弯人员=MAX(case when g.工序名称='打弯' then 员工姓名 else '' end),
冲孔数量=sum(case when g.工序名称='冲孔' then 数量 else 0 end) ,
冲孔人员 =MAX(case when g.工序名称='冲孔' then 员工姓名 else '' end)from 加工表 j join 员工表 y on j.员工编号=y.员工编号 join 工序表 g on j.工序编号=g.工序编号
group by 生产单号 , 物品编码 /*
ID 生产单号 物品编码 下料数量 下料人员 打弯数量 打弯人员 冲孔数量 冲孔人员
----------- ---------- ---------- ----------- ---------- ----------- ---------- ----------- ----------
1 SC01 X01 10 张三 10 李四 9 王五
*/