有两个表
第一个表里有id 日期 第二个表里也有id 日期 但第二个表里的日期是大量重复的我想把第一个表里的日期全都列出来,然后看看每条记录在第二个表里是否有这个日期,如果有就列出1,如果没有就列出0例如表1
1 200909
2 200908
3 200907表2
1 200909
2 200909
3 200907
4 200907
搜索出的结果是
1 200909 1
2 200908 0
3 200907 1
这用一条sql语句能列出来吗

解决方案 »

  1.   

    select a.*,isnull(sign(b.id),0)
    from [t1] a left join [t1] b
    on a.id=b.id and a.日期=b.日期
      

  2.   

    slect *,case when exists (select 1 from tb2 where a.日期=日期) then 1 else 0 end as is_exists
    from tb1 a
      

  3.   

    select *,case when exists (select 1 from tb2 where a.日期=日期) then 1 else 0 end as is_exists
    from tb1 a
      

  4.   


    select *,case when b.日期 is null then 0 else 1 end  from 
    表1 a left join
    ( select distinct 日期 from 表2 ) b on a.日期 = b.日期或select
    *,
    case when exists ( select * from 表2 where 日期 = a.日期 ) then 1 else 0 end
    from 
    表1 a
      

  5.   

    DECLARE @a TABLE (id INT,dt VARCHAR(20))
    DECLARE @b TABLE (id INT,dt VARCHAR(20))INSERT  @a (id,dt)
            SELECT  1,'200909'
            UNION ALL
            SELECT  2,'200908'
            UNION ALL
            SELECT  3,'200907'INSERT  @b (id,dt)
            SELECT  1,'200909'
            UNION ALL
            SELECT  2,'200909'
            UNION ALL
            SELECT  3,'200907'
            UNION ALL
            SELECT  4,'200907'SELECT  a.*,CASE WHEN bb.dt IS NULL THEN 0 ELSE 1 END 
    FROM    @a AS a LEFT JOIN (SELECT DISTINCT b.dt FROM @b AS b) AS bb ON a.dt = bb.dt
    /*
    id          dt                               
    ----------- -------------------- ----------- 
    1           200909               1
    2           200908               0
    3           200907               1
    */
      

  6.   

    select a.id,b.years,case when a.years=b.years2 then 1 else 0 end from tb1 a inner join tb2 on a.id=b.id2