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表中不存在该记录
)