从不同的表

时间:2017-08-21 04:50:11

标签: sql sql-server ssms

我是SQL的新手,所以对noob问题道歉。我搜索过其他文章,但似乎找不到适用于我的问题的东西......

基本上我有2个表(DOCMASTER,DOSHISTORY),因为您可能已经猜到这是对我们的DMS的查询。用户基本上想要一份关于某组文件编号(这些是模板文件)的报告,其中包含以下信息; - 创建日期 - 上次访问 - 最后修改 - 文件编号(唯一标识)

我可以通过以下2个查询获得上述信息;

创建日期+最后修改日期(来自DOCMASTER表)

SELECT [DOCNAME],[DOCNUM],[EDITWHEN] as 'last edited date',[ENTRYWHEN] as 'created date'
FROM [Knowledge_Prod].[MHGROUP].[DOCMASTER]
where DOCNUM in ('10098776', '1355264')

最后访问日期(来自DOCHISTORY表)

SELECT DOCNUM, MAX (ACTIVITY_DATETIME) as 'last accessed date'
FROM [Knowledge_Prod].[MHGROUP].[DOCHISTORY]
WHERE ACTIVITY in ('View','Create','Copy', 'Checkin', 'Checkout','Print','Mail')
  and DOCNUM in ('10098776', '1355264')
Group by DOCNUM

基于DOCNUM加入这些查询的最佳方法是将结果一起编译成结果;

DOCNUM - 上次访问日期 - 上次编辑日期 - 创建日期

谢谢你提前得到你的帮助,这在过去的几个小时里一直在摧毁我的灵魂。我也在使用SMSS查询所有内容。

2 个答案:

答案 0 :(得分:2)

因为我们没有测试数据以及以下是最安全的方法

;with cte
as
(
SELECT [DOCNAME],[DOCNUM],[EDITWHEN] as 'last edited date',[ENTRYWHEN] as 'created date'
    FROM [Knowledge_Prod].[MHGROUP].[DOCMASTER]
    where DOCNUM in ('10098776', '1355264')
)
,cte1 as
(
 SELECT DOCNUM, MAX (ACTIVITY_DATETIME) as 'last accessed date'
      FROM [Knowledge_Prod].[MHGROUP].[DOCHISTORY]
      WHERE ACTIVITY in ('View','Create','Copy', 'Checkin', 'Checkout','Print','Mail') and DOCNUM in ('10098776', '1355264')
      Group by DOCNUM)
select * from cte c join cte1 c1
on c1.docnum=c.docnum

答案 1 :(得分:0)

var conditionField = condition.replace(/(.*)(.*EQUALS)/, '$1');