qq_39372401 2017-12-10 06:07 采纳率: 75%
浏览 3369
已采纳

(SQL SERVER存储过程)将查询的数据放到另外一张表的字段里,仅此而已

ALTER PROCEDURE [dbo].[bb_sx_sclr]
       @KSRQ  varchar(20),       --开始时间
       @JSRQ  varchar(20)        --结束时间
AS
BEGIN

    DECLARE @DATE_S DATETIME,@DATE_E DATETIME --定义时间格式的日期变量
    DECLARE @DATE_TMP DATETIME --交换日期用的临时变量
    BEGIN TRY --开始校验输入是否合法
    SET @DATE_S =CONVERT(DATETIME,@KSRQ) --转换输入的字符串日期到时间格式的变量
    SET @DATE_E =CONVERT(DATETIME,@JSRQ) --转换输入的字符串日期到时间格式的变量
    IF @DATE_S>@DATE_E --如果开始日期大于结束日期,则交换,允许用户输入日期大小相反
BEGIN   
    SET @DATE_TMP=@DATE_S
    SET @DATE_S=@DATE_E
    SET @DATE_E=@DATE_TMP
END
END TRY
    BEGIN CATCH --错误处理,校验不通过则输出'0000-00'
    SELECT '0000-00' LIST
    RETURN 
END CATCH
    DECLARE @CHAR_MONTH VARCHAR(3)                  --定义月份的字符串临时变量
    drop table t_sclr
    create table t_sclr(
            月份        varchar(7),
            装配总数      varchar(20)

    )
 --比较条件:当前年份*12<=目标年和月份则继续
WHILE (DATEPART(YYYY,@DATE_S)*12+DATEPART(MM,@DATE_S)<=DATEPART(YYYY,@DATE_E)*12+DATEPART(MM,@DATE_E))
Begin
    SET @CHAR_MONTH=CONVERT(VARCHAR(2),DATEPART(MM,@DATE_S))        --转换当前月份的数据类型到字符串
    SET @CHAR_MONTH='0'+@CHAR_MONTH                                 --在月份前加“0”
    SET @CHAR_MONTH=SUBSTRING(@CHAR_MONTH,LEN(@CHAR_MONTH)-2+1,2)   --截取最后两位确保月份为1和2的时候其显示为01和02                                           

    INSERT INTO t_sclr(月份) VALUES(CONVERT(VARCHAR(4),DATEPART(YYYY,@DATE_S))+'-'+@CHAR_MONTH)
    SET @DATE_S=DATEADD(MM,1,@DATE_S)                               --当前月份+1
END 
SELECT 月份 FROM t_sclr ORDER BY 月份 ASC                  --按照先后顺序返回需要的结果列表



--2.装配总数    
insert into t_sclr(装配总数,月份)
select cast(YEAR(a.EXTEND50) as nvarchar(4)) + '-' + cast(MONTH(a.EXTEND50) as nvarchar(2)) as 时间, SUM(isnull(b.OUT_NUM,0)) as 发货数量
from t_contract_order a left join T_CONTRACT_ORDER_DETAIL b
on a.sub_account_id=b.sub_account_id
where a.EXTEND50>=@KSRQ and a.EXTEND50<=@JSRQ and a.EXTEND1='博莱特工程'
group by cast(YEAR(a.EXTEND50) as varchar(4)) + '-' + cast(MONTH(a.EXTEND50)


END


这是我的执行结果
消息 156,级别 15,状态 1,过程 bb_sx_sclr,第 53 行
关键字 'END' 附近有语法错误。

  • 写回答

4条回答 默认 最新

  • bbwolf 2017-12-10 07:35
    关注

    select ISNULL(T1.月份,T2.月份) as 月份,
    装配总数,合同金额,装配成本,装配利润,装配利润率,
    销售台数,开票金额,销售成本,销售利润,销售利润率
    FROM
    (
    select cast(YEAR(EXTEND50) as nvarchar(4)) + '-' + cast(MONTH(EXTEND50) as nvarchar(2)) as 月份,
    COUNT(sub_account_id) as 装配总数,
    SUM(discount_money) as 合同金额 ,
    SUM(EXTEND36) as 装配成本 ,
    SUM(discount_money) / 1.17 - SUM(EXTEND36) as 装配利润 ,
    (SUM(discount_money) / 1.17 - SUM(EXTEND36) ) / SUM(discount_money) as 装配利润率
    from T_CONTRACT_ORDER
    WHERE EXTEND1 = '装配工程单' AND EXTEND50 >= @KSRQ AND EXTEND50 <= @JSRQ
    Group By cast(YEAR(EXTEND50) as nvarchar(4)) + '-' + cast(MONTH(EXTEND50) as nvarchar(2))
    ) T1
    FULL OUTER JOIN
    (
    Select cast(YEAR(O.EXTEND50) as nvarchar(4)) + '-' + cast(MONTH(O.EXTEND50) as nvarchar(2)) as 月份,
    SUM(D.INVOICED_NUM) as 销售台数,
    SUM(O.INVOICED_MONEY) as 开票金额 ,
    SUM(O.EXTEND36) as 销售成本 ,
    SUM(O.INVOICED_MONEY) / 1.17 - SUM(O.EXTEND36) as 销售利润 ,
    (SUM(O.INVOICED_MONEY) / 1.17 - SUM(O.EXTEND36) ) / SUM(O.INVOICED_MONEY) as 销售利润率
    FROM T_CONTRACT_ORDER O INNER JOIN T_CONTRACT_ORDER_detail D ON O.sub_account_id = D.sub_account_id
    where O.EXTEND50 >= @KSRQ AND O.EXTEND50 <= @JSRQ and O.EXTEND1 = '工程销售'
    GROUP BY cast(YEAR(O.EXTEND50) as nvarchar(4)) + '-' + cast(MONTH(O.EXTEND50) as nvarchar(2))
    ) T2
    ON T1.月份 = T2.月份

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥200 求能开发抖音自动回复卡片的软件
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。