为简单起见,假设我有一个包含一列的SQL表,其中包含数字数据。样本数据是
11
13
21
22
23
3
31
32
33
41
42
131
132
133
141
142
143
如果表中包含x1,x2,x3形式的所有数字,但不包括x(其中x是数字的所有数字,但最后一位数。所以对于123456,x将是12345),那么我想要用新行x替换这三行。
上述数据的理想输出为:
11
13
2
3
31
32
33
41
42
131
132
133
14
我如何用SQL实现这一目标?我应该提一下,我不想永久改变数据 - 只是为了查询结果。 感谢。
答案 0 :(得分:2)
我假设
函数的存在:lastDigit
和head
分别产生最后一位数字和其余输入值
数据是唯一的
只有数字1,2,3用于构造表值
该表名为t
,并且只有一列x
你不希望这个递归地工作
像这样创建一个视图n
:select head(x) h, lastDigit(x) last from t
您可以使用内嵌视图
创建一个像这样的视图
选择h 从n h组 有计数(*)= 3
然后这应该给出所需的结果:
select distinct x
from (
select x from t where head(x) not in (select h from c)
union
select h from c
)
答案 1 :(得分:0)
您需要两个SQL命令,一个用于删除现有行,另一个用于添加新行。它们看起来像这样(其中:X
是一个包含基数的参数,在您的示例中为14):
DELETE FROM YourTable WHERE YourColumn BETWEEN (:X*10) AND ((:X*10) + 9)
INSERT INTO YourTable (YourColumn) VALUES (:X)
注意:我假设您希望删除x0到x9中的所有数字,这就是我上面写的内容。如果你真的只想删除x1,x2,x3,那么你将使用这个DELETE
语句:
DELETE FROM YourTable WHERE YourColumn BETWEEN ((:X*10) + 1) AND ((:X*10) + 3)