zoukankan      html  css  js  c++  java
  • sql 动态行转列

    DECLARE @smallGongDuan VARCHAR(50), @date DATETIME,@endDate DATETIME,@bc VARCHAR(200),@baiWan VARCHAR(20),@bcName VARCHAR(20)
    --@gongDuan='外观挑选,分级补电,制浆,铝塑膜,极耳,隔膜纸,组装,二次分级,分级,化成,铝转镍,抽气折边,自动封装,自动焊接,点焊封边,二次容检,入库前容检,制片,注液,卷绕,机叠,叠片,涂布',
    SET @smallGongDuan='制浆'
    set @date ='2016-06-21'
    set @endDate ='2016-06-23'
    set @bc ='''D2'',''D1'',''B1'',''A1'',''F'',''G'',''D'',''B'',''E'',''C'',''A'''
    set @baiWan =''
    set @bcName =''

    if(@smallGongDuan='制浆')
    begin
    --------查询制浆在该日期段的最大版本
    select * into #zhijiangBills
    from zhiJiangDianBill a
    where a.version = (
    select max(version)
    from zhiJiangDianBill b where
    a.planDate=b.planDate and b.planDate BETWEEN @date and @endDate
    )

    declare @zjBC varchar(100)

    if @bc is null or @bc=''      
       set @zjBC='A,B,C,D,E,F,G,A1,B1'      
    

    else
    begin
    set @zjBC=replace(@bc,'''','')
    end

    SELECT [zJHao],tp.orderName,sum([taskNum]) as taskNum,sum([zhiJiangNum]) as zhiJiangNum,[jiCode],[jiXing],[startDate],[gongYiDate],[endDate]      
    

    ,[bc],[baiWan],[firstOrder],z.[planDate],[version],z.[fName],[tuBuJiCode]
    into #zhijiangBill FROM #zhijiangBills z
    left join tblProSchedu tp on z.shengChanHao=tp.shengChanHao
    where z.bc IN (select * from dbo.f_split(@zjBC,',')) and baiWan like '%'+@baiWan+'%'
    group by [zJHao],[jiCode],[jiXing],[startDate],[gongYiDate],[endDate],[bc],[baiWan],[firstOrder],z.[planDate],[version],z.[fName],[tuBuJiCode],tp.orderName

    SELECT * INTO #zhijian FROM (

    select 0 as did,a.zjhao as shengChanHao,a.orderName as model,convert(varchar(20),taskNum) as planNum ,
    a.jiXing ,zhiJiangNum as taskNum ,convert(int,0) taskPianNum ,convert(float,0) taskMiNum ,'' upGui,'' downGui,
    a.bc ,a.baiWan, convert(varchar(5),a.firstOrder) as firstOrder,a.version,a.planDate,'制浆' as gongDuan ,a.fname,
    convert(float,0) unitNum ,'' xiaoPian,'' gongYi,
    convert(datetime,null) as startTime,convert(datetime,null) as endTime,'' as tuBujiTai,'' as proCode,'' as znGongYiCode,'' as Remark,
    convert(float,0) as lvSuMoNum,convert(float,0) as geMoZhiNum,'' as dianJieGuiGe,
    convert(int,isnull(b.endNum,0))/1000 as endNum,0 as upEndNum,0 as downEndNum,b.endDate,'1900-01-01' as downEndDate,bc.name as bcName,
    case when b.endDate<=dateadd(hour,1,a.endDate) then 'OK' ELSE 'NG' end as endState
    ,'' as downEndState
    from #zhijiangBill a
    left join
    (
    select substring(zjHao,1,7) as zjhao,banCi as bc,ji as jixing,max(okDate) as endDate,outDate as sDate,sum(outNum) as endNum
    from zhijiang
    --where outDate between @date and @endDate
    group by substring(zjHao,1,7),banCi,ji,okDate,outDate
    )b
    on a.zjhao =b.zjHao and a.jixing=b.jixing
    --inner join tblProSchedu tp on a.shengChanHao=tp.shengChanHao
    left join banCi bc on a.bc=bc.classCode and a.fname=bc.fname and bc.gong='制浆'

    ) zhijian

    --SELECT * FROM #zhijian

    SELECT gongDuan,planDate,COUNT(1) AS JiHuaPici INTO #ZhiJianJiHuaPiCi FROM #zhijian WHERE planDate IS NOT NULL GROUP BY gongDuan,planDate
    SELECT gongDuan,planDate,COUNT(1) AS WangChengPici INTO #ZhiJianWanChengPiCi FROM #zhijian WHERE planDate IS NOT NULL AND endState='OK' GROUP BY gongDuan,planDate
    SELECT gongDuan,planDate,COUNT(1) AS WeiWanChengPici INTO #ZhiJianWeiWanChengPiCi FROM #zhijian WHERE planDate IS NOT NULL AND endState='NG' GROUP BY gongDuan,planDate

    SELECT jhpc.*,wcpc.WangChengPici,wwcpc.WeiWanChengPici INTO #ZhiJianPivot FROM #ZhiJianJiHuaPiCi jhpc
    LEFT JOIN #ZhiJianWanChengPiCi wcpc ON jhpc.gongDuan = wcpc.gongDuan AND jhpc.planDate = wcpc.planDate
    LEFT JOIN #ZhiJianWeiWanChengPiCi wwcpc ON wcpc.gongDuan = wwcpc.gongDuan AND wcpc.planDate = wwcpc.planDate
    ORDER BY jhpc.planDate

    --SELECT * FROM #ZhiJianPivot

    ------游标遍历时间用作列
    declare auth_cur cursor FOR SELECT planDate FROM #ZhiJianPivot
    DECLARE @timeS DATETIME, @timeSlist VARCHAR(2000)
    SET @timeS=NULL
    SET @timeSlist=''
    open auth_cur

    fetch next from auth_cur into @timeS

    while (@@fetch_status=0)

    BEGIN

    --PRINT '['+convert(varchar(10),@timeS,120)+']'+',' 
    SET @timeSlist=@timeSlist+'['+CONVERT(varchar(100),convert(varchar(10),@timeS,120), 23)+']'+',' 
    fetch next from auth_cur into @timeS 
    

    END

    close auth_cur

    deallocate auth_cur
    SET @timeSlist=SUBSTRING(@timeSlist,0,LEN(@timeSlist))
    --SELECT @timeSlist
    --------游标遍历时间用作列

    DECLARE @sqlStr NVARCHAR(MAX)
    SET @sqlStr=''
    SET @sqlStr=@sqlStr+'SELECT ''计划数''AS ''日期'',FROM (select gongduan,planDate,JiHuaPici from #ZhiJianPivot)cc PIVOT(sum(JiHuaPici) FOR planDate IN('+@timeSlist+')) planDate UNION ALL '
    SET @sqlStr=@sqlStr+'SELECT ''完成数''AS ''日期'',
    FROM (select gongduan,planDate,WangChengPici from #ZhiJianPivot)cc PIVOT(sum(WangChengPici) FOR planDate IN('+@timeSlist+')) planDate UNION ALL '
    SET @sqlStr=@sqlStr+'SELECT ''未完成数''AS ''日期'',*FROM (select gongduan,planDate,WeiWanChengPici from #ZhiJianPivot)cc PIVOT(sum(WeiWanChengPici) FOR planDate IN('+@timeSlist+')) planDate '

    EXEC (@sqlStr)

    declare @sql varchar(max)
    --SET @sql='SELECT ''计划数''AS ''日期'''
    --SET @sql=@sql+',sum(case when planDate='+convert(varchar(10),planDate,120)+'then JiHuaPici else 0 end) as '+'['+convert(varchar(10),planDate,120)+']' from #ZhiJianPivot

    --set @sql='SELECT gongDuan,WangChengPici,WangChengPici,WeiWanChengPici '
    --select @sql=@sql+',sum(case when planDate='+convert(varchar(10),planDate,120)+'then JiHuaPici else 0 end) as '+'['+convert(varchar(10),planDate,120)+']' from #ZhiJianPivot
    --SELECT @sql

    --exec (@sql+'from #ZhiJianPivot'+' GROUP BY gongDuan,WangChengPici,WangChengPici,WeiWanChengPici,planDate')
    --SELECT gongDuan,WangChengPici,WangChengPici,WeiWanChengPici ,
    --sum(case when planDate=2016-06-21then JiHuaPici else 0 end) as [2016-06-21],
    --sum(case when planDate=2016-06-22then JiHuaPici else 0 end) as [2016-06-22],
    --sum(case when planDate=2016-06-23then JiHuaPici else 0 end) as [2016-06-23]

    drop table #zhijiangBill,#zhijiangBills,#zhijian,#ZhiJianJiHuaPiCi,#ZhiJianWanChengPiCi,#ZhiJianWeiWanChengPiCi,#ZhiJianPivot

    end

  • 相关阅读:
    P2765 魔术球问题 网络流二十四题重温
    搬东西 dp
    Q
    P2774 方格取数问题 网络流重温
    2019牛客暑期多校训练1
    E. A Simple Task
    Codeforces Round #575 (Div. 3) 昨天的div3 补题
    自动化测试如何准备测试数据
    金三银四,资深HR给面试者的十大建议
    我的自动化测试之路[转载]
  • 原文地址:https://www.cnblogs.com/VictorBlog/p/5619312.html
Copyright © 2011-2022 走看看