0

我想将一列的值与另一行的另一列进行比较。我尝试使用自加入来完成此操作,但它无法正常工作。有没有一种有效的方法可以在不使用游标的情况下做到这一点。示例表如下所示。我很想知道 Table2 中的 FromDate2 是否位于 Row1 的日期范围 ThruDate1 和 Row2 的 FromDate1 之间。如果它位于,则将第 1 行中的计数更新为 2,因为表 2 中有两行 1 和 2 位于数据范围之间。此外,如果 Table1 中没有第 3 行取范围,则查找 table2 中的第 3 行的 FromDate2 是否 >= 表 1 的第 1 行的 ThruDate1。

表格1:

Row    MemberID1    FromDate1    ThruDate1        Count 
1         Mem1      01/10/2012   01/12/2012       
2         Mem1      02/01/2012   02/10/2012

表 2:

Row       MemberID2  FromDate2    
 1        Mem1         01/14/2012     
 2        Mem1         01/17/2012     
 3        Mem1         02/11/2012 

如果有人可以在这个问题上帮助我,我真的很感激。

谢谢,山姆

4

2 回答 2

1

如果我对您的理解正确,则此查询将起作用:

update Table1 SET Count = 2 
where Row = 1 AND 
EXISTS
(select * from Table2
where FromDate2 Between
(select ThruDate1 from Table1 where Row = 1)
AND
(select FromDate1 from Table1 where Row = 2));

这是SQLFiddle

于 2013-09-21T05:10:09.323 回答
0

我可能误解了,但这就是我认为你想要实现的目标:

  1. 对于 中的每一行Table1,创建一个从ThruDate1到的范围[next row with same MemberID1].FromDate1
  2. 使用具有相同成员 id 并且落在步骤 1 中确定的范围之间的Count行数更新。Table2

但是,我不确定您希望在没有下一行的情况下在Table1.

无论如何,这是示例

WITH data AS (
  SELECT 
    Row,
    (
      SELECT TOP 1 FromDate1
      FROM Table1
      WHERE Row > t1.Row AND MemberID1 = t1.MemberID1
      ORDER BY Row
    ) AS NextDate
  FROM Table1 t1
)
UPDATE t1
SET [Count] = (
    SELECT COUNT(*)
    FROM Table2
    WHERE
      MemberID2 = t1.MemberID1
      AND FromDate2 BETWEEN t1.ThruDate1 AND data.NextDate
)
FROM Table1 t1
INNER JOIN data
  ON t1.Row = data.Row;
于 2013-09-21T05:29:30.987 回答