【问题标题】:SQL - Changing column values based on temporary table datasetSQL - 根据临时表数据集更改列值
【发布时间】:2015-05-19 19:23:34
【问题描述】:

我正在使用 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 的临时表中,其中 AdjCode = 1。

tmp表[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 中的每一行。

如果 [Type Code] 是“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

然后根据这个记录集,如果有一个带有'2'的[Adj Code],我想更新对应的TableData的[Final]列'Y'。同样,我想用“N”为 [Final] 列“N”更新匹配 TableData 的匹配记录,其中 [Adj Code] = 0。

如果 [Type Code] 不是“10”(在这种情况下是“40”),我想做同样的过程,除了添加 [Thru Date] 以及......看起来像这: 在 TempData 的 [Code 1]、[Code 2]、[Type Code] 和 [From Date] AND [Thru Date] 列匹配的 TableData 上选择。

应该是这样的:

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

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

【问题讨论】:

标签: sql sql-server-2012


【解决方案1】:

我在这篇文章之后使用了嵌套游标:stackoverflow.com/questions/469019/cursor-inside-cursor

虽然它是一个临时解决方案并且有效,但使用游标的运行时间非常慢。完成我的查询需要一个多小时(超过 9 万条记录)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    • 1970-01-01
    • 2021-10-10
    • 1970-01-01
    相关资源
    最近更新 更多