qq_39372401
2017-12-10 06:07
采纳率: 74.1%
浏览 3.2k

(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.月份

    点赞 评论
  • shroud?? 2017-12-10 06:15

    End附近检查一遍,删掉重新打一遍,不行了就是语法错误

    点赞 评论
  • whahahahy 2017-12-10 06:19

    重新打一遍,应该是语法错误

    点赞 评论
  • OWN79 2017-12-10 06:24

    检查一下是否有标点符号不一致的地方

    点赞 评论

相关推荐 更多相似问题