匹配两个表

时间:2017-05-18 10:37:49

标签: sql sql-server-2008 sql-scripts

我需要一些帮助,我需要从我的数据库中提取数据,现在我有一个FD_Documents表和FD_Revision表。

我需要匹配两个表中的GUID,并且还需要是大于2的修订版,一旦匹配完成,它必须在结果中添加新列,QC'ed“1”用于匹配条件或者“0”表示不匹配标准。

我写了下面的内容,但它没有给我结果。

select Case when EXISTS (
       SELECT FD_Documents.GUID,
      FD_Documents.FD_C231FD9A as [Store],
      FD_Documents.FD_97CDB35A as [Store 2],
      FD_Documents.FD_8B9BD5C6 as [Transaction Date],
      FD_Documents.FD_84A4EF1A as [Account Number],
      FD_Documents.FD_1A3D602F as [Name],
      FD_Documents.FD_F8EFD019 as [Date of Birth],
      FD_Documents.FD_9DAADEC8 as [Document Type],
      FD_Documents.FD_8B43AE0B as [Year],
      FD_Documents.FD_E77BE253 as [File Name]
      FROM FD_Documents, FD_Revisions
      WHERE FD_Documents.GUID = FD_Revisions.GUID
      AND FD_Documents.Deleted = '0'
      AND FD_Revisions.Revision < '3')
      THEN CAST(1 as bit)
      ELSE CAST(0 AS bit) END

3 个答案:

答案 0 :(得分:2)

我假设FD_Documents.Deleted是一个int或bit(不是你帖子中的字符串),并且该版本是一个int(并且应该大于2,就像你的问题描述中的代码而不是你的代码),

SELECT FD_Documents.GUID,
  FD_Documents.FD_C231FD9A as [Store],
  FD_Documents.FD_97CDB35A as [Store 2],
  FD_Documents.FD_8B9BD5C6 as [Transaction Date],
  FD_Documents.FD_84A4EF1A as [Account Number],
  FD_Documents.FD_1A3D602F as [Name],
  FD_Documents.FD_F8EFD019 as [Date of Birth],
  FD_Documents.FD_9DAADEC8 as [Document Type],
  FD_Documents.FD_8B43AE0B as [Year],
  FD_Documents.FD_E77BE253 as [File Name],
  CASE ISNULL(FD_Revisions.GUID,'') WHEN '' THEN 0 ELSE 1 END AS IsMatching
  FROM FD_Documents LEFT JOIN FD_Revisions
  ON FD_Documents.GUID = FD_Revisions.GUID
  AND FD_Documents.Deleted = 0
  AND FD_Revisions.Revision > 2

答案 1 :(得分:0)

这将为您提供所需状态的不同GUID列表

import _ from 'lodash';

答案 2 :(得分:0)

像这样的东西

  SELECT FD_Documents.GUID,
      FD_Documents.FD_C231FD9A as [Store],
      FD_Documents.FD_97CDB35A as [Store 2],
      FD_Documents.FD_8B9BD5C6 as [Transaction Date],
      FD_Documents.FD_84A4EF1A as [Account Number],
      FD_Documents.FD_1A3D602F as [Name],
      FD_Documents.FD_F8EFD019 as [Date of Birth],
      FD_Documents.FD_9DAADEC8 as [Document Type],
      FD_Documents.FD_8B43AE0B as [Year],
      FD_Documents.FD_E77BE253 as [File Name],
  case when r.GUID IS NULL then 1 else 0 end [MatchCount]
  FROM FD_Documents d
        LEFT JOIN  FD_Revisions r on d.GUID = r.GUID AND FD_Revisions.Revision > '2' 
  where FD_Documents.Deleted = '0' 

我不能肯定地说,但是这是个主意,如果你提供一些测试数据,这个查询可能更具体,因为这个查询没有经过测试