当前位置: 代码迷 >> Sql Server >> 同表内联,该怎么解决
  详细解决方案

同表内联,该怎么解决

热度:100   发布时间:2016-04-24 08:47:48.0
同表内联
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大列?  
  相关解决方案