各位,目前我把一张领料单用sql把竖表变成了横表,如图1,
sql语句如下:
ALTER PROCEDURE [dbo].[iqc_Getnpicks]
(
@p1no varchar(50),
@pono varchar(50)
)
AS
declare @sql varchar(8000)  
set @sql = 'select pno as ' + '料號,Pname as 名稱'  
select @sql = @sql + ' , sum(case pdat when ''' + pdat + ''' then plnm else 0 end) [' + pdat + ']'  
from (select distinct pdat from vw_pickbom ) as a  
set @sql = @sql + ' from vw_pickbom where p1no = ''' + @p1no + ''' and pono = ''' + @pono + ''' group by pno,Pname'exec(@sql)   
RETURN
--图1而我要个记录要每条下要加入子项的BOM(如图2--效果图的黑色部分)--图2
资料库主要用到Picks and v_bom
黑色的子项数量是根据父项的数量得到(用Picks领料单的数量 * BOM的标准用量)
这个循环我该如何写好这个结果的SQL呢? 这个问题困扰我很多天了,求帮助,谢谢!!

解决方案 »

  1.   

    这个效果要用1条SQL写出来,
    BOM的资料如下图
      

  2.   

    CREATE TABLE [dbo].[Picks](
    [pid] [decimal](9, 0) IDENTITY(1,1) NOT NULL,
    [pno] [varchar](20) NULL,
    [p1no] [varchar](20) NULL,
    [plnm] [decimal](18, 0) NULL,
    [plnd] [datetime] NULL,
    [pono] [varchar](50) NULL,
     CONSTRAINT [PK_Picks] PRIMARY KEY CLUSTERED 
    (
    [pid] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    ----------------------------------------------------
    CREATE TABLE [dbo].[v_bom](
    [de01] [varchar](20) NOT NULL,
    [Expr1] [varchar](60) NULL,
    [de02] [varchar](20) NOT NULL,
    [Expr2] [varchar](60) NULL,
    [de03] [float] NULL,
    [de04] [float] NULL,
    [da24] [varchar](6) NULL
    ) ON [PRIMARY]Picks.pno = v_bom.de01
      

  3.   

    不知道大家明白了没?就是每条领料记录下把其关联的子项BOM显示出来
    我目前就是做到把竖的领料单记录(Picks)做成横表,如图一,而现在就是在每条下面循环加入其对应的子项BOM的树状架构,每个子项的领料数量就是其父项的Picks的plnm的领料数量计算出来的
    也就是说显示了领料的明细,把今天的领料横表显示出来了,同时也把每个关联的子项BOM也明白的显示出来了
      

  4.   

    INSERT INTO [PRODUCTION11].[dbo].[v_bom]
               (<de01, varchar(20),>  --父项物料       
               ,<Expr1, varchar(60),>  --父项物料名称
               ,<de02, varchar(20),>  --子项物料
               ,<Expr2, varchar(60),>  --子项物料名称
               ,<de03, float,>    --子项用量
               ,<de04, float,>   --父项用量
               ,<da24, varchar(6),>)   --单位
         VALUES
    '1L334-ACS-0101','334小包用黑色包邊帶標准裁切','2Z-334BBD-0101','334小包用黑色包邊帶標准裁切',1,1,'個'
    '1L334-ACS-0101','334小包內裡用牛津布標准裁切','2Z-334NJB-0101','334小包內裡用牛津布標准裁切',2,1,'個'
    '1L334-ACS-0101','334小包用納帕PU皮標准裁切空軍藍','2Z-334PT-0100','334小包用納帕PU皮標准裁切空軍藍',2,1,個
    '1L334-ACS-0101','0.25mm透明PVC膠片 48"','3P-PVC-2401','0.25mm透明PVC膠片',0.004,1,'碼'
    '1L334-ACS-0101','車線 灰色 2股40# 8309#','3Z-CX-0601','車線 灰色 2股40# 8309#',1.8,1,'米'
    '2Z-334BBD-0101','黑色尼龍包邊帶 好 41# 偏硬','3Z-BBD-0101','黑色尼龍包邊帶 好 41# 偏硬',0.33,1,'碼'
    '1L334-ACS-0101','黑色1"人字紋3#拉鏈布  400碼/卷581A','3Z-LLB-0101','黑色1"人字紋3#拉鏈布',0.15,1,'碼'
    '1L334-ACS-0101','白叻色拉鏈夾','3Z-LLJ-0401','白叻色拉鏈夾',1,1,'個'
    '1L334-ACS-0101','3#黑色烤漆短排拉鏈頭','3Z-LLT-0101','3#黑色烤漆短排拉鏈頭',1,1,'個'
    '2Z-334NJB-0101','牛津布 黑色150D 55','3Z-NJB-0101','牛津布 黑色150D',0.017,2,'碼'
    '1L334-ACS-0101','103粉膠 皮套粘合用','6Z-103FJ-01','103粉膠 皮套粘合用',1,1,'克'
    '1L334-ACS-0101','477號藥水膠 皮套粘合用','6Z-477JS-01','477號藥水膠 皮套粘合用',1.5,1,'克'
    -----------------------------------------------------------------------
    INSERT INTO [PRODUCTION11].[dbo].[Picks]
               (<pno, varchar(20),>  --领料的物料号       (1,2,3,4..流水号)
               ,<p1no, varchar(20),> -- 上层物料号
               ,<plnm, decimal(18,0),> --领料数量
               ,<plnd, datetime,> --领料日期
               ,<pono, varchar(50),>)  --订单号
         VALUES
    1,'1L334-ACS-0101','ACS352-PALI-0100',200,'2012/3/3','2B2301E'
    2,'2Z-352BZ-01','ACS352-PALI-0100',20,'2012/3/6','2B2301E'
    3,'2Z-352BZ-01','ACS352-PALI-0100',20,'2012/3/6','2B2301E'
    4,'2Z-SXD-41B00','ACS352-PALI-0100',20,'2012/3/6','2B2301E'贴些记录以便操作,谢谢!
      

  5.   

    没人知道吗?呜呜...
    if object_id('[v_bom]') is not null drop table [tb]
    create table [v_bom] (de01 varchar(20),Expr1 varchar(60),de02 varchar(20),Expr2 varchar(60),de03 float,de04 float,da24 varchar(6))
    insert into [v_bom]
    select '1L334-ACS-0101','334小包用黑色包邊帶標准裁切','2Z-334BBD-0101','334小包用黑色包邊帶標准裁切',1,1,'個' union all
    select '1L334-ACS-0101','334小包內裡用牛津布標准裁切','2Z-334NJB-0101','334小包內裡用牛津布標准裁切',2,1,'個' union all
    select '1L334-ACS-0101','334小包用納帕PU皮標准裁切空軍藍','2Z-334PT-0100','334小包用納帕PU皮標准裁切空軍藍',2,1,'個' union all
    select '1L334-ACS-0101','0.25mm透明PVC膠片 48"','3P-PVC-2401','0.25mm透明PVC膠片',0.004,1,'碼' union all
    select '1L334-ACS-0101','車線 灰色 2股40# 8309#','3Z-CX-0601','車線 灰色 2股40# 8309#',1.8,1,'米' union all
    select '2Z-334BBD-0101','黑色尼龍包邊帶 好 41# 偏硬','3Z-BBD-0101','黑色尼龍包邊帶 好 41# 偏硬',0.33,1,'碼' union all
    select '1L334-ACS-0101','黑色1"人字紋3#拉鏈布 400碼/卷581A','3Z-LLB-0101','黑色1"人字紋3#拉鏈布',0.15,1,'碼' union all
    select '1L334-ACS-0101','白叻色拉鏈夾','3Z-LLJ-0401','白叻色拉鏈夾',1,1,'個' union all
    select '1L334-ACS-0101','3#黑色烤漆短排拉鏈頭','3Z-LLT-0101','3#黑色烤漆短排拉鏈頭',1,1,'個' union all
    select '2Z-334NJB-0101','牛津布 黑色150D 55','3Z-NJB-0101','牛津布 黑色150D',0.017,2,'碼' union all
    select '1L334-ACS-0101','103粉膠 皮套粘合用','6Z-103FJ-01','103粉膠 皮套粘合用',1,1,'克' union all
    select '1L334-ACS-0101','477號藥水膠 皮套粘合用','6Z-477JS-01','477號藥水膠 皮套粘合用',1.5,1,'克' union allgo