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

  • 相关阅读:
    Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础
    Android Studio 单刷《第一行代码》系列 04 —— Activity 相关
    Android Studio 单刷《第一行代码》系列 03 —— Activity 基础
    Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat
    Android Studio 单刷《第一行代码》系列 01 —— 第一战 HelloWorld
    IDEA 内网手动添加oracle,mysql等数据源,以及server returns invalid timezone错误配置
    eclipse maven设置
    IntelliJ IDE 常用配置
    eclipse maven 常见问题解决方案
    Maven 安装和配置
  • 原文地址:https://www.cnblogs.com/VictorBlog/p/5619312.html
Copyright © 2011-2022 走看看