(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个回答

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

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

qq_39372401
qq_39372401 OK
2 年多之前 回复

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐