我想将一列的值与另一行的另一列进行比较。我尝试使用自联接完成此操作,但它不能完美地工作。有没有一种有效的方法 不使用游标就可以做到这一点。示例表如下所示。我有兴趣发现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
如果有人能在这个问题上帮助我,我真的很感激。
谢谢, 萨姆
答案 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)
我可能误解了,但这就是我认为你想要实现的目标:
Table1
中的每一行,请创建从ThruDate1
到[next row with same MemberID1].FromDate1
的范围。Count
中具有相同成员ID且属于步骤1中确定范围的行数更新Table2
。但是,我不确定您希望如何在没有下一行的情况下在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;