多次为 XXX 指定了列 XXX 在SQL运行中运行是正常的

20210804103122.png

数据集

set nocount on

EXEC 营运调度任务用时统计 '${开始1}','${结束1}','${开始2}','${结束2}','${ccb}'

存储过程重点部分

DECLARE @FEILEI1 VARCHAR(20) ,

    @FEILEI2 VARCHAR(20) ,

    @FEILEI3 VARCHAR(20) ,

    @FEILEI4 VARCHAR(20),

    @STR1 VARCHAR(1024),

    @STR2 VARCHAR(1024),

    @DSTR VARCHAR(1024),

    @JOIN_STR VARCHAR(1024)

SET @FEILEI1 = dbo.Func_字符分割_索引(@FENLEI,',',1)

SET @FEILEI2 = dbo.Func_字符分割_索引(@FENLEI,',',2)

SET @FEILEI3 = dbo.Func_字符分割_索引(@FENLEI,',',3)

SET @FEILEI4 = dbo.Func_字符分割_索引(@FENLEI,',',4)

--时段1分类,时段2分类,join 字符拼接

SET @STR1 = ''

SET @STR2 = ''

SET @DSTR = ''

SET @JOIN_STR = ''

IF ISNULL(@FEILEI1,'') <> ''

    BEGIN

       SET @STR1 = @STR1 +  @FEILEI1 + '1 ,'

       SET @STR2 = @STR2 +  @FEILEI1 + '2 ,'

       SET @DSTR = @DSTR +  @FEILEI1 + '1 ' + @FEILEI1 + ','

       SET @JOIN_STR = @JOIN_STR +  'D1.' + @FEILEI1 + '1 = D2.' + @FEILEI1 + '2'

    END

    

IF ISNULL(@FEILEI2,'') <> ''

    BEGIN

        SET @STR1 = @STR1 +  @FEILEI2 + '1 ,'

        SET @STR2 = @STR2 +  @FEILEI2 + '2 ,'

        SET @DSTR = @DSTR +  @FEILEI2 + '1 ' + @FEILEI2 + ','

        SET @JOIN_STR = @JOIN_STR +  ' AND D1.' + @FEILEI2 + '1 = D2.' + @FEILEI2 + '2'

    END

    

IF ISNULL(@FEILEI3,'') <> ''

    BEGIN

        SET @STR1 = @STR1 +  @FEILEI3 + '1 ,'

        SET @STR2 = @STR2 +  @FEILEI3 + '2 ,'

        SET @DSTR = @DSTR +  @FEILEI3 + '1 ' + @FEILEI1 + ','

        SET @JOIN_STR = @JOIN_STR +  ' AND D1.' + @FEILEI3 + '1 = D2.' + @FEILEI3 + '2'

    END

IF ISNULL(@FEILEI4,'') <> ''

    BEGIN

        SET @STR1 = @STR1 +  @FEILEI4 + '1 ,'

        SET @STR2 = @STR2 +  @FEILEI4 + '2 ,'

        SET @DSTR = @DSTR +  @FEILEI4 + '1 ' + @FEILEI1 + ','

        SET @JOIN_STR = @JOIN_STR +  ' AND D1.' + @FEILEI4 + '1 = D2.' + @FEILEI4 + '2'

    END

IF ISNULL(@JOIN_STR,'') = ''

    BEGIN

       SET @JOIN_STR = 'D2.司机资格证号2 = D1.司机资格证号1'

    END

DECLARE @SQLSTR VARCHAR(1024)

    SET @SQLSTR = ' SELECT ' + @DSTR + ' D1.任务1 , D1.有单天数1,D1.运行时间1,D2.有单天数2,D2.运行时间2

        FROM (SELECT ' + @STR1 +'任务1,count(DISTINCT 日期1) 有单天数1 ,sum(运行时间1) 运行时间1

        FROM #TEMP_DETAIL1

        GROUP BY '+ @STR1 +'任务1) D1

            LEFT JOIN (SELECT ' + @STR2 +'任务2,count(DISTINCT 日期2) 有单天数2 ,sum(运行时间2) 运行时间2

                       FROM #TEMP_DETAIL2

                       GROUP BY '+ @STR2 +'任务2) D2 ON ' + @JOIN_STR + ' AND D1.任务1 = D2.任务2

    '

EXEC (@SQLSTR)

数据库是SQL SERVER 

在SQL SERVER 中运行是正常的

FineReport 用户G2281009 发布于 2021-8-4 10:35 (编辑于 2021-8-4 10:38)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-8-4 10:46

 把最后的 EXEC (@SQLSTR) 改成 print(@SQLSTR) 然后在MSSMS 中运行一次,把输出的结果贴出来。注意传入的参数和你报表预览时参数一致

  • 用户G2281009 用户G2281009(提问者) SELECT 更纸线路1 更纸线路,司机资格证号1 司机资格证号, D1.任务1 , D1.有单天数1,D1.运行时间1,D2.有单天数2,D2.运行时间2 FROM (SELECT 更纸线路1 ,司机资格证号1 ,任务1,count(DISTINCT 日期1) 有单天数1 ,sum(运行时间1) 运行时间1 FROM #TEMP_DETAIL1 GROUP BY 更纸线路1 ,司机资格证号1 ,任务1) D1 LEFT JOIN (SELECT 更纸线路2 ,司机资格证号2 ,任务2,count(DISTINCT 日期2) 有单天数2 ,sum(运行时间2) 运行时间2 FROM #TEMP_DETAIL2 GROUP BY 更纸线路2 ,司机资格证号2 ,任务2) D2 ON D1.更纸线路1 = D2.更纸线路2 AND D1.司机资格证号1 = D2.司机资格证号2 AND D1.任务1 = D2.任务2 输出 print(@SQLSTR)见上面代码,上面代码在MSSMS 中运行正常
    2021-08-04 10:50 
  • Z4u3z1 Z4u3z1 回复 用户G2281009(提问者) 和报表预览时传入参数一样?如果一样那就把字段用中括号扩起来试试.例如[D1.有单天数1]
    2021-08-04 11:05 
  • 用户G2281009 用户G2281009(提问者) 回复 Z4u3z1 核查过,原来错误真和传入参数有关,感谢
    2021-08-04 14:35 
最佳回答
0
烟尘Lv6高级互助
发布于2021-8-4 10:44(编辑于 2021-8-4 10:45)

这个错误提示通常原因是两个关联的表中有名字相同的列,如果要同时取到一张表中,会有冲突,这样就需要指定你取的是哪一个表中的列。看你最后拼接的sql里还有函数相关的东西,不好判断,建议分步把最后的sql打印出来,然后判断是哪个字段名称重复了

print @SQLSTR

  • 用户G2281009 用户G2281009(提问者) 在SQL SERVER中运行该存储过程时正常的,但在报表中提示’多次为 XXX 指定了列 XXX‘ 打印出来的SQL拼接语句如下: SELECT 更纸线路1 更纸线路, 司机资格证号1 司机资格证号, D1.任务1, D1.有单天数1, D1.运行时间1, D2.有单天数2, D2.运行时间2 FROM (SELECT 更纸线路1, 司机资格证号1, 任务1, count(DISTINCT 日期1) 有单天数1, sum(运行时间1) 运行时间1 FROM #TEMP_DETAIL1 GROUP BY 更纸线路1, 司机资格证号1, 任务1) D1 LEFT JOIN (SELECT 更纸线路2, 司机资格证号2, 任务2, count(DISTINCT 日期2) 有单天数2, sum(运行时间2) 运行时间2 FROM #TEMP_DETAIL2 GROUP BY 更纸线路2, 司机资格证号2, 任务2) D2 ON D1.更纸线路1 = D2.更纸线路2 AND D1.司机资格证号1 = D2.司机资格证号2 AND D1.任务1 = D2.任务2
    2021-08-04 10:47 
  • 烟尘 烟尘 回复 用户G2281009(提问者) sql看起来没问题,你在模版数据集里是用的sql还是存储过程?
    2021-08-04 10:54 
  • 用户G2281009 用户G2281009(提问者) 回复 烟尘 在存储过程中用
    2021-08-04 11:13 
  • 2关注人数
  • 241浏览人数
  • 最后回答于:2021-8-4 10:46
    请选择关闭问题的原因
    确定 取消
    返回顶部