如何将表的一列与SQL中其他行的其他列进行比较

时间:2013-09-21 04:31:34

标签: sql sql-server sql-server-2008-r2


我想将一列的值与另一行的另一列进行比较。我尝试使用自联接完成此操作,但它不能完美地工作。有没有一种有效的方法 不使用游标就可以做到这一点。示例表如下所示。我有兴趣发现Table2的FromDate2是否位于Row1的Date Range ThruDate1和Row2的FromDate1之间。如果它位于然后用2更新第1行中的Count,因为表2中有两行1和2位于数据范围之间。并且如果Table1中没有第3行占用范围,则查找表2中row3的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 

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

谢谢, 萨姆

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

  1. 对于Table1中的每一行,请创建从ThruDate1[next row with same MemberID1].FromDate1的范围。
  2. 使用Count中具有相同成员ID且属于步骤1中确定范围的行数更新Table2
  3. 但是,我不确定您希望如何在没有下一行的情况下在Table1中创建范围。

    无论如何, here's the example

    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;