sql报错看不出来

select cc.*, bb.供应商 优选供应商 from

((SELECT c.ITEM供应商合并,c.ITEM, c.物料说明, c.SQE, c.供应商, c.PO,c.time from(select *

      from dbo.活动区间ITEM a

      where convert(varchar(10), time, 120) >= '2022-01-01'

        and convert(varchar(10), time, 120) <= '2022-05-16' )c

group by c.ITEM供应商合并,c.ITEM, c.物料说明, c.SQE, c.供应商, c.PO,c.time)cc

left join (select *

                    from dbo.活动区间ITEM a

                    where convert(varchar(10), time, 120) >= '2021-01-01'

                      and convert(varchar(10), time, 120) <= '2021-12-31') bb on cc.ITEM = bb.ITEM

where bb.供应商 is not null

  and cc.供应商 <> bb.供应商)

SQLSERVER的

callie 发布于 2022-5-16 14:24
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-5-16 14:28(编辑于 2022-5-16 14:31)

看一下你的dbo.活动区间ITEM这个表里面有没有字段是ITEM?

或者这样看一下?

select cc.*, bb.供应商 优选供应商 from

(SELECT c.ITEM供应商合并,c.ITEM, c.物料说明, c.SQE, c.供应商, c.PO,c.time from(select *

      from dbo.活动区间ITEM a

      where convert(varchar(10), time, 120) >= '2022-01-01'

        and convert(varchar(10), time, 120) <= '2022-05-16' )c

group by c.ITEM供应商合并,c.ITEM, c.物料说明, c.SQE, c.供应商, c.PO,c.time)cc

left join (select *

                    from dbo.活动区间ITEM a

                    where convert(varchar(10), time, 120) >= '2021-01-01'

                      and convert(varchar(10), time, 120) <= '2021-12-31') bb on cc.ITEM = bb.ITEM

where bb.供应商 is not null

  and cc.供应商 <> bb.供应商

  • callie callie(提问者) 有的
    2022-05-16 14:31 
  • CD20160914 CD20160914 回复 callie(提问者) 上面修改的语句你试一下?或者不用cc.*。直接把cc的所有字段都写出来。。
    2022-05-16 14:31 
  • CD20160914 CD20160914 回复 callie(提问者) 我改了上面的语句,你试一下
    2022-05-16 14:32 
最佳回答
0
好好生活好好学习Lv7资深互助
发布于2022-5-16 14:28(编辑于 2022-5-16 14:35)

image.png

image.png

这里是and 吧

select 

  cc.*, 

  bb.供应商 优选供应商 

from 

  (

    SELECT 

      c.ITEM供应商合并, 

      c.ITEM, 

      c.物料说明, 

      c.SQE, 

      c.供应商, 

      c.PO, 

      c.time 

    from 

      (

        select 

          * 

        from 

          dbo.活动区间ITEM a 

        where 

          convert(

            varchar(10), 

            time, 

            120

          ) >= '2022-01-01' 

          and convert(

            varchar(10), 

            time, 

            120

          ) <= '2022-05-16'

      ) c 

    group by 

      c.ITEM供应商合并, 

      c.ITEM, 

      c.物料说明, 

      c.SQE, 

      c.供应商, 

      c.PO, 

      c.time

  ) cc 

  left join (

    select 

      * 

    from 

      dbo.活动区间ITEM a 

    where 

      convert(

        varchar(10), 

        time, 

        120

      ) >= '2021-01-01' 

      and convert(

        varchar(10), 

        time, 

        120

      ) <= '2021-12-31'

  ) bb on cc.ITEM = bb.ITEM 

where 

  bb.供应商 is not null 

  and cc.供应商 <> bb.供应商

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-5-16 14:38

多了最外层的括号 删了

image.png

最佳回答
0
shinger@126.comLv2见习互助
发布于2022-5-16 15:21

多了最后面的括号。然后是你的思维方式要改一下:用了left join,然后判断右表必须is not null,意思就是完全直接使用内关联inner join来替代left join。另外一个就是不要在where子句中,对列使用函数,特别是有索引的列,会直接导致该索引失效。比如convert(varchar(10), time, 120) >= '2022-01-01' and convert(varchar(10), time, 120) <= '2022-05-16' ) 完全可以替换成 time between '2022-01-01' and '2022-05-16 23:59:59.997'

  • 4关注人数
  • 321浏览人数
  • 最后回答于:2022-5-16 15:21
    请选择关闭问题的原因
    确定 取消
    返回顶部