SQL - 根据临时表数据集

时间:2015-05-19 19:23:34

标签: sql sql-server-2012

SQL Server Mgt Studio 2012就是我正在使用的。总结一下,我希望一次执行几个命令。我是一名.NET开发人员,所以我想从if和elses。

我在[TableData]中有原始数据,如下所示:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code | Final
1  | 2001   | 9982   | 10        | 2015-01-13| 2015-01-13| 0        | Y
2  | 2001   | 9982   | 10        | 2015-01-13| 2015-01-13| 1        | N
3  | 2001   | 9982   | 10        | 2015-01-13| 2015-01-24| 2        | Y
4  | 2001   | 2653   | 40        | 2014-12-29| 2014-12-29| 0        | Y
5  | 2001   | 2653   | 40        | 2014-12-29| 2014-12-29| 1        | N

我将TableData中的数据插入名为TempData的临时表中,其中Adj​​Code = 1。

tmp table [TempData]数据:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code 
1  | 2001   | 9982   | 10        | 2015-01-13| 2015-01-13| 1
2  | 2001   | 2653   | 40        | 2014-12-29| 2013-12-29| 1

我想通过[类型代码]检查TempData中的每一行。

如果[类型代码]是' 10'然后我想在TableData上做一个新的选择,其中TempData的[Code 1],[Code 2],[Type Code]和[From Date]列匹配。

这应该是这样的:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code | Final
1  | 2001   | 9982   | 10        | 2015-01-13| 2015-01-13| 0        | Y
2  | 2001   | 9982   | 10        | 2015-01-13| 2015-01-24| 2        | Y

然后根据此记录集,如果[Adj Code]有' 2'我想更新相应的TableData' [Final]列' Y'。同样,我也不得不更新匹配的TableData匹配记录与“N' N'对于[最终]专栏' N'其中[Adj Code] = 0。

如果[类型代码]不是' 10' (另一个用' 40'在这种情况下),我想做同样的过程,除了添加[Thru Date]以外......看起来像这样:  在TableData上选择TempData的[Code 1],[Code 2],[Type Code]和[From Date] AND [Thru Date]列匹配。

这应该是这样的:

ID | Code 1 | Code 2 | Type Code | From Date | Thru Date | Adj Code | Final
1  | 2001   | 2653   | 40        | 2014-12-29| 2014-12-29| 0        | Y
2  | 2001   | 2653   | 40        | 2014-12-29| 2014-12-29| 1        | N

我希望这不会太令人困惑......我很乐意提供更多信息,因为我需要尽快完成这项工作。感谢。

1 个答案:

答案 0 :(得分:0)

我在本文后面使用了嵌套游标:stackoverflow.com/questions/469019/cursor-inside-cursor

虽然它是一个临时解决方案并且有效但是游标的运行时速度非常慢。完成我的查询需要一个多小时(达到超过90k的记录)。