小编Aph*_*ppe的帖子

查找具有开始日期和结束日期的记录未涵盖的时间差

我有一张费用记录表(f_fee_item)如下:

Fee_Item_ID    int
Fee_Basis_ID   int
Start_Date     date
End_Date       date
Run Code Online (Sandbox Code Playgroud)

(删除了无关的列)

假设相同Fee_Basis_ID的记录不会重叠.

我需要Fee_Basis_ID在提供的@Query_Start_Date和之间的每个费用记录中找到每个缺口的Start_Date和End_Date @Query_End_Date.我需要这些数据来计算未收取费用的所有期间的应计费用.

如果给定的Fee_Basis_ID根本没有费用记录,我还需要查询返回记录(如果有帮助,Fee_Basis_ID是D_Fee_Basis.Fee_Basis_ID的外键).

例如:

@Query_Start_Date = '2011-01-01'
@Query_Start_Date = '2011-09-30'
Run Code Online (Sandbox Code Playgroud)

D_Fee_Basis:

F_Fee_Item
1
2
3
Run Code Online (Sandbox Code Playgroud)

F_Fee_Item:

Fee_Item_ID  Fee_Basis_ID  Start_Date  End_Date
1            1             2011-01-01  2011-03-31
2            1             2011-04-01  2011-06-30
3            2             2011-01-01  2011-03-31
4            2             2011-05-01  2011-06-30
Run Code Online (Sandbox Code Playgroud)

要求的结果:

Fee_Basis_ID   Start_Date  End_Date
1              2011-07-01  2011-09-30
2              2011-04-01  2011-04-30
2              2011-07-01  2011-09-30
3              2011-01-01  2011-09-30
Run Code Online (Sandbox Code Playgroud)

我已经尝试了不同的自我加入,试图让它工作但没有运气.

请帮忙!!

sql t-sql sql-server sql-server-2005

5
推荐指数
1
解决办法
847
查看次数

当引用表中没有匹配的记录时,delete语句如何与REFERENCE约束冲突?

我运行一个删除记录的存储过程,然后从源系统重新填充它们.SP的删除部分根据表的层次结构进行构造,CHILD_TABLE在从引用的表(PARENT_TABLE)中删除之前从引用表(允许调用它)中删除.我从删除时得到"与REFERENCE约束冲突的DELETE语句..."错误PARENT_TABLE.

delete语句中有一个where子句,当我运行带有相同where子句的select语句时,我返回了11条记录.所以我们试图删除11条记录.

CHILD_TABLEPARENT_TABLE含有FK列的引用PARENT_TABLE.PRIMARY_KEY.但是,当我CHILD_TABLE使用以下任一方法运行select语句时,我得到0行返回:

  1. PARENT_TABLE.PRIMARY_KEYselect语句上面的值复制并粘贴到where子句中IN
  2. 复制并粘贴上面的select语句,并使用IN针对FK/PK的where子句
  3. 复制并粘贴上面的select语句并放入where子句使用EXISTS WHERE等.

因此,在我看来,SQL Server认为在CHILD_TABLE确实没有的时候有数据.

这个问题看起来像是"与REFERENCE约束冲突的DELETE语句"的副本,而引用表中没有数据,但答案是(释义)"实际上存在引用表中的数据".但是,就我而言,引用的表中确实没有数据.不完全是.

我想知道是否有一个过时的索引显示参考约束,那么当真的没有时会有数据?

任何帮助/指针赞赏.

sql-server sql-server-2012

5
推荐指数
1
解决办法
814
查看次数