ID 产品ID 物料名称 所用数量 物料大类标记
1 11 名称1 100 1
2 11 名称2 70 1
3 11 名称3 90 1
4 11 名称4 100 2
5 11 名称5 90 2
想得到如下表格:
物料大类1 物料大类2
名称 用量 名称 用量
名称1 100 名称4 100
名称2 70 名称5 90
名称3 90
------解决思路----------------------
我只会静态的, 大概可以这么写。。。
;with tb(ID, 产品ID, 物料名称, 所用数量, 分类标记) as
(
select 1, 11, '名称1', 100, 1 union all
select 2, 11, '名称2', 70, 1 union all
select 3, 11, '名称3', 90, 1 union all
select 4, 11, '名称4', 100, 2 union all
select 5, 11, '名称5', 90, 2
)
, tb02 as
(
select ROW_NUMBER() OVER(partition by 分类标记 order by 物料名称) as tid,
* from tb where 分类标记 = 1
)
, tb03 as
(
select ROW_NUMBER() OVER(partition by 分类标记 order by 物料名称) as tid,
* from tb where 分类标记 = 2
)
select t1.物料名称 as 大类1物料名称, t1.所用数量 as 大类1所用数量,
isnull(t2.物料名称, '') as 大类2物料名称,
isnull(convert(nvarchar(20),t2.所用数量), '') as 大类2所用数量 from tb02 t1
left join tb03 t2
on t1.tid =t2.tid
------解决思路----------------------
#1 把 LEFT JOIN 改为 FULL JOIN 更恰当,不能确定两个类别哪个数量多。
------解决思路----------------------
如果有3个大类,那不是要横着显示3大列?