Sql server 2008 r2 将线索连接到SQL Server R2中的重复记录

Sql server 2008 r2 将线索连接到SQL Server R2中的重复记录,sql-server-2008-r2,Sql Server 2008 R2,我加入两张桌子。我的桌子如下 **Table_1** **T_ID** **CategoryID** **Name** ..... 01 219 ABC ..... 02 218 MNO ..... 03 219 SAO ..... 04

我加入两张桌子。我的桌子如下

                  **Table_1**
**T_ID**     **CategoryID**      **Name**      .....
 01             219             ABC       .....
 02             218             MNO       .....
 03             219             SAO       .....
 04             222             JKO       .....
 05             222             SDF       .....
 06             222             VBC       .....
 07             222             KLJ       .....
  .              .              .           .
  .              .              .           .
  .              .              .           .

                  **Table_2**
 P_ID          NormalImage        IsProfile       T_ID
 01             <Binary Data>      1              01
 02             <Binary Data>      0              01
 03             <Binary Data>      0              01
 04             <Binary Data>      0              01
 05             <Binary Data>      1              04
 06             <Binary Data>      0              04
 07             <Binary Data>      1              01
 08             <Binary Data>      0              01
  .              .              .           .
  .              .              .           .
  .              .              .           .
   select   AdInstance.AdID
   ,AdInstance.Title
    ,CASE
       WHEN DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE()) < 24 THEN 
           CASE DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE()) 
               WHEN 1 THEN 
                  CONVERT(VARCHAR, DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE())) + ' hour ago' 
               ELSE 
                  CONVERT(VARCHAR, DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE())) + ' hours ago'
           END
      ELSE 
     REPLACE(CONVERT(VARCHAR, AdInstance.PublishedDate, 6), ' ', '-')
   END as PublishedDate 
    ,left(AdInstance.Description,120) +'...' as Description 
    ,PhotoDetails.NormalImage
    ,PhotoDetails.AdPhotoID
    ,count(*)
       from Table_1 as AdInstance
       left  join Table_2 as PhotoDetails on PhotoDetails.AdID = AdInstance.AdID

       Where Adinstance.CategoryID= 219 and PhotoDetails.IsProfileImage = 'true' 
**表1**
**T_ID****类别ID****名称**。。。。。
01 219 ABC。。。。。
02218 MNO。。。。。
03 219 SAO。。。。。
04 222 JKO。。。。。
05 222自卫队。。。。。
06 222 VBC。。。。。
07 222 KLJ。。。。。
.              .              .           .
.              .              .           .
.              .              .           .
**表2**
P_ID正常图像IsProfile T_ID
01                   1              01
02                   0              01
03                   0              01
04                   0              01
05                   1              04
06                   0              04
07                   1              01
08                   0              01
.              .              .           .
.              .              .           .
.              .              .           .
我的问题如下

                  **Table_1**
**T_ID**     **CategoryID**      **Name**      .....
 01             219             ABC       .....
 02             218             MNO       .....
 03             219             SAO       .....
 04             222             JKO       .....
 05             222             SDF       .....
 06             222             VBC       .....
 07             222             KLJ       .....
  .              .              .           .
  .              .              .           .
  .              .              .           .

                  **Table_2**
 P_ID          NormalImage        IsProfile       T_ID
 01             <Binary Data>      1              01
 02             <Binary Data>      0              01
 03             <Binary Data>      0              01
 04             <Binary Data>      0              01
 05             <Binary Data>      1              04
 06             <Binary Data>      0              04
 07             <Binary Data>      1              01
 08             <Binary Data>      0              01
  .              .              .           .
  .              .              .           .
  .              .              .           .
   select   AdInstance.AdID
   ,AdInstance.Title
    ,CASE
       WHEN DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE()) < 24 THEN 
           CASE DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE()) 
               WHEN 1 THEN 
                  CONVERT(VARCHAR, DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE())) + ' hour ago' 
               ELSE 
                  CONVERT(VARCHAR, DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE())) + ' hours ago'
           END
      ELSE 
     REPLACE(CONVERT(VARCHAR, AdInstance.PublishedDate, 6), ' ', '-')
   END as PublishedDate 
    ,left(AdInstance.Description,120) +'...' as Description 
    ,PhotoDetails.NormalImage
    ,PhotoDetails.AdPhotoID
    ,count(*)
       from Table_1 as AdInstance
       left  join Table_2 as PhotoDetails on PhotoDetails.AdID = AdInstance.AdID

       Where Adinstance.CategoryID= 219 and PhotoDetails.IsProfileImage = 'true' 
选择AdInstance.AdID
,adinstation.Title
案例
当DATEDIFF(HOUR,AdInstance.PublishedDate,GETDATE())小于24时
CASE DATEDIFF(小时,AdInstance.PublishedDate,GETDATE())
当我
转换(VARCHAR,DATEDIFF(HOUR,AdInstance.PublishedDate,GETDATE())+“HOUR ago”
其他的
转换(VARCHAR,DATEDIFF(HOUR,AdInstance.PublishedDate,GETDATE())+“hours ago”
结束
其他的
替换(转换(VARCHAR,AdInstance.PublishedDate,6),“”-“”)
以发布日期结束
,左(AdInstance.Description,120)+“…”作为说明
,PhotoDetails.NormalImage
,光电二极管
,count(*)
如表1所示:
左连接表_2作为PhotoDetails.AdID=AdInstance.AdID上的PhotoDetails
其中Adinstance.CategoryID=219,PhotoDetails.IsProfileImage='true'

此查询仅检索
表2中的数据。我想检索
表2
中的数据,哪个isProfile为true,以及
表2
中不存在的数据。如何在SQL SERVER 2008 R2中满足这种情况。

基于您的问题,我认为这段代码可以满足您的要求:返回记录,其中,
isProfile='true'
或连接条件不返回任何记录。过滤到
isProfile='true'
将排除它认为isProfile为NULL的任何情况,例如当表2中没有匹配的
AdID

在我的查询中,我添加了短语
PhotoDetails.AdID为NULL
,以检查该记录是否存在,因为它是连接条件的一部分-您必须验证它是否按预期工作

SELECT 
     AdInstance.AdID
    ,AdInstance.Title
    ,CASE
        WHEN DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE()) < 24 
        THEN 
            CASE DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE()) 
                WHEN 1 
                THEN CONVERT(VARCHAR, DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE())) + ' hour ago' 
                ELSE CONVERT(VARCHAR, DATEDIFF(HOUR, AdInstance.PublishedDate, GETDATE())) + ' hours ago'
            END
        ELSE REPLACE(CONVERT(VARCHAR, AdInstance.PublishedDate, 6), ' ', '-')
     END as PublishedDate 
    ,LEFT(AdInstance.Description,120) +'...' as Description 
    ,PhotoDetails.NormalImage
    ,PhotoDetails.AdPhotoID
    ,count(*) TotalRecords -- added a column name
FROM 
    Table_1 as AdInstance
     LEFT JOIN 
    Table_2 as PhotoDetails ON 
        PhotoDetails.AdID = AdInstance.AdID
WHERE 
    Adinstance.CategoryID= 219 AND
      (
        PhotoDetails.IsProfileImage = 'true' OR
        PhotoDetails.AdID IS NULL -- the record does not exist in the PhotoDetails table
      )
选择
阿迪德
,adinstation.Title
案例
当DATEDIFF(小时,AdInstance.PublishedDate,GETDATE())小于24
然后
CASE DATEDIFF(小时,AdInstance.PublishedDate,GETDATE())
当1
然后转换(VARCHAR,DATEDIFF(HOUR,AdInstance.PublishedDate,GETDATE())+“HOUR ago”
ELSE转换(VARCHAR、DATEDIFF(HOUR、AdInstance.PublishedDate、GETDATE())+“hours ago”
结束
ELSE替换(CONVERT(VARCHAR,AdInstance.PublishedDate,6),“”-“”)
以发布日期结束
,左(AdInstance.Description,120)+“…”作为说明
,PhotoDetails.NormalImage
,光电二极管
,count(*)TotalRecords--添加了列名
从…起
表_1作为附件
左连接
表2作为光检测器,位于
PhotoDetails.AdID=AdInstance.AdID
哪里
Adinstance.CategoryID=219和
(
PhotoDetails.IsProfileImage='true'或
PhotoDetails.AdID为空--PhotoDetails表中不存在该记录
)