【发布时间】:2012-02-25 09:20:59
【问题描述】:
tbl_indicator
grp_nbr, sect_nbr, indicat
001234 100 p
002345 101 s
tbl_group
grp_id, grp_nbr, sect_nbr, indicat
333 001987 100 a
555 001987 100 p
444 002987 101 s
222 02987 101 y
这里(tbl_group)grp_id 是主键
tbl_order
order_id, grp_id
5000 333
5001 555
5002 555
5003 555
5004 444
5005 444
5006 222
在tbl_order 中,grp_id 是tbl_group 中grp_id 的外键。
在表tbl_indicator 中,对于一组grp_nbr 和sect_nbr 有一个indicat,对于同一组grp_nbr 和sect_nbr 有一个正确的indicat (555,1 , 100, p) 和一个垃圾 indicat (333, 1, 100, a) 在表 tbl_group 中,但是这两个 grp_id (333, 555) 都存在于表 tbl_orders 中。
这里还有一件事是组表(222、02987、101、y)中的垃圾数据(指示)grp_nbr 比tbl_indicat 中的grp_nbr 少一个字符长度。它应该使用“LIKE”运算符
我们该如何处理?
现在我需要更新tbl_order 表,以便将垃圾grp_id s 替换为正确的grp_id s
输出应该是这样的:
tbl_orders
order_id, grp_id
5000 555
5001 555
5002 555
5003 555
5004 444
5005 444
5006 444
如果tbl_indicat 和tbl_grp 表中的列数据相同,我已经有了答案...
“博士”回答了这个问题。威利的学徒”
但是如果数据不同(比如在开始时缺少一些字符串)如何处理?
【问题讨论】:
-
欢迎来到 StackOverflow:如果您发布代码、XML 或数据示例,请在文本编辑器中突出显示这些行并单击“代码示例”按钮 (
{ }) 在编辑器工具栏上很好地格式化和语法突出显示它! -
如果将列转换为数字并进行数字比较,则可以忽略前导零。您如何确定哪些是“垃圾”记录?
-
我无法将其转换为数字 b/c 我的某些数据包含字符
-
如果我在 tbl_group 和 tbl_indicator 表中找不到相应的 grp_nbr 和 sect_nbr 集的指示值,那么该 rec 是 tbl_group 表中的垃圾记录
-
另外,请避免在标题中添加(帮助我),并尝试使标题与您的问题更相关。
标签: sql sql-server sql-server-2005 tsql