Sql 获取具有与特定模式匹配的联接列的行

Sql 获取具有与特定模式匹配的联接列的行,sql,sql-server,tsql,Sql,Sql Server,Tsql,好的-我有一个带有索赔ID和程序代码混合的表-我需要做的是隔离只有程序代码以8开头的claimID的claimID-因此在下面,我需要能够仅获取claimID类似于“8%”代码存在的claimID记录-没有其他程序代码,等等-所以只有2个和3个来自下面的claimID claimID procedureCode 1 85025 1 97110 2 85025 2 80102 3 87112

好的-我有一个带有索赔ID和程序代码混合的表-我需要做的是隔离只有程序代码以8开头的claimID的claimID-因此在下面,我需要能够仅获取claimID类似于“8%”代码存在的claimID记录-没有其他程序代码,等等-所以只有2个和3个来自下面的claimID

    claimID procedureCode
    1       85025
    1       97110
    2       85025
    2       80102
    3       87112
    3       81020

如果索赔的任何记录以不同的数字开头,我想排除索赔ID。

我们分三个步骤完成此操作。第一步是查找不符合“无其他前导数字”要求的记录。第二步是找到满足“必须从8开始”要求的记录。第三步是将两个集合与匹配,这样我们从步骤2中获取集合,并从步骤1中排除集合:

我们还需要知道
procedureCode
列的数据类型。稍微了解一下,我认为
char(5)
或类似的选项是最合适的,这取决于您如何处理修饰符。如果这就是您存储它的方式,那么它应该可以工作:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
但是,您可能已将其存储为整数/数字字段。如果是这样的话,这应该是可行的:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL

我们分三步来做。第一步是查找不符合“无其他前导数字”要求的记录。第二步是找到满足“必须从8开始”要求的记录。第三步是将两个集合与匹配,这样我们从步骤2中获取集合,并从步骤1中排除集合:

我们还需要知道
procedureCode
列的数据类型。稍微了解一下,我认为
char(5)
或类似的选项是最合适的,这取决于您如何处理修饰符。如果这就是您存储它的方式,那么它应该可以工作:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
但是,您可能已将其存储为整数/数字字段。如果是这样的话,这应该是可行的:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL

我们分三步来做。第一步是查找不符合“无其他前导数字”要求的记录。第二步是找到满足“必须从8开始”要求的记录。第三步是将两个集合与匹配,这样我们从步骤2中获取集合,并从步骤1中排除集合:

我们还需要知道
procedureCode
列的数据类型。稍微了解一下,我认为
char(5)
或类似的选项是最合适的,这取决于您如何处理修饰符。如果这就是您存储它的方式,那么它应该可以工作:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
但是,您可能已将其存储为整数/数字字段。如果是这样的话,这应该是可行的:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL

我们分三步来做。第一步是查找不符合“无其他前导数字”要求的记录。第二步是找到满足“必须从8开始”要求的记录。第三步是将两个集合与匹配,这样我们从步骤2中获取集合,并从步骤1中排除集合:

我们还需要知道
procedureCode
列的数据类型。稍微了解一下,我认为
char(5)
或类似的选项是最合适的,这取决于您如何处理修饰符。如果这就是您存储它的方式,那么它应该可以工作:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
但是,您可能已将其存储为整数/数字字段。如果是这样的话,这应该是可行的:

With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode NOT LIKE '8%'
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE '8%'
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL
With BadClaims As ( --Step 1
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode < 80000 or procedureCode >= 90000
), GoodClaims AS ( --Step 2
  SELECT distinct ClaimID
  FROM [Table]
  WHERE procedureCode LIKE >= 80000 and procedureCode < 90000
)
SELECT g.ClaimID --Step 3
FROM GoodClaims g
LEFT JOIN BadClaims b on b.ClaimID = g.ClaimID
WHERE b.ClaimID IS NULL


使用WHERE NOT EXISTS子句。claimID,其中所有过程代码都以“8”开头?那么
1 85025
记录呢?@JoelCoehoorn,它将被排除,因为ID 1还有一个以9开头的过程代码。您在处理时是否也要编辑主题行?:)这充其量是误导性的。使用WHERE NOT EXISTS子句。claimID,其中所有过程代码都以“8”开头?那么
1 85025
记录呢?@JoelCoehoorn,它将被排除,因为ID 1还有一个以9开头的过程代码。您在进行此操作时也想编辑主题行吗?:)这充其量是误导性的。使用WHERE NOT EXISTS子句。claimID,其中所有过程代码都以“8”开头?那么
1 85025
记录呢?@JoelCoehoorn,它将被排除,因为ID 1还有一个以9开头的过程代码。您在进行此操作时也想编辑主题行吗?:)这充其量是误导性的。使用WHERE NOT EXISTS子句。claimID,其中所有过程代码都以“8”开头?那么
1 85025
记录呢?@JoelCoehoorn,它将被排除,因为ID 1还有一个以9开头的过程代码。您在进行此操作时也想编辑主题行吗?:)这充其量只是误导。他不想要claimID 1,只想要那些只有以“8”开头的程序代码的。ClaimID 1有一个以“9”开头的过程代码。您可能希望在第二个代码示例中编辑此行:其中ClaimID LIKE>=80000,ClaimID<90000。我想你应该看看procedureCode而不是ClaimID。此外,如果procedureCode是一个数字,它可以简单地转换为varchar并与LIKE运算符一起使用。他不想要claimID 1,只需要那些只有以“8”开头的procedureCode的。ClaimID 1有一个以“9”开头的过程代码。您可能希望在第二个代码示例中编辑此行:其中ClaimID LIKE>=80000,ClaimID<90000。我想你应该看看procedureCode而不是ClaimID。此外,如果procedureCode是一个数字,它可以简单地转换为varchar并与LIKE运算符一起使用。他不想要claimID 1,只需要那些只有以“8”开头的procedureCode的。ClaimID 1有一个以“9”开头的过程代码。您可能希望在第二个代码示例中编辑此行:其中ClaimID LIKE>=80000,ClaimID<90000。我想你应该看看procedureCode而不是ClaimID。此外,如果procedureCode是一个数字,它可以简单地转换为varchar并与LIKE运算符一起使用。他不想要claimID 1,只需要那些只有以“8”开头的procedureCode的。