我对以下查询的输出感到困惑:
select
'Eq Type' =
case
when
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) =
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type]))
then
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1)
when
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) <>
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type]))
then
replace([Eq Type], '-', '')
else
null
end,
'Failure_Class' =
case
when charindex('-', [Eq Type]) <> 0 and
(substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) =
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type])))
then
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1)
when charindex('-', [Eq Type]) <> 0 and
(substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) <>
substring([Eq Type], charindex('-', [Eq Type]) + 1, len([Eq Type])))
then
substring([Eq Type], 1, charindex('-', [Eq Type]) - 1) +
'\' +
replace([Eq Type], '-', '')
when CHARINDEX('-', [Eq Type]) = 0
then
Failure_Class
else
null
end
from dbo.Location
位置表包含25385条记录,但只返回8157条记录。为什么记录被过滤掉了?
当我尝试将dbo.ModifiedLocation添加到上面的查询时,它失败并出现以下错误:“传递给LEFT或SUBSTRING函数的长度参数无效”。该消息非常具有描述性,但是当我添加into子句时,为什么会出现此错误?为什么在没有into子句的情况下正常执行查询?
修改 我想解释一下我想要实现的目标。原始数据集有两个我感兴趣的列,Eq Type和Failure_Class。数据如下:
Eq Type, Failure_Class
ACCU-ACCU, ACCU
AUX-AUX, AUX
VA-BA, VA
VA-CH, VA
IP-LS, IP
null, null
VE, VE
JB, JB
VA, null
因为数据是手工维护的,所以它是不一致的。我需要以下格式的数据,以便能够将其导入资产管理系统。
Eq Type, Failure_Class
ACCU, ACCU
AUX, AUX
VABA, VA\VABA
VACH, VA\VACH
IPLS, IP\IPLS
null, null
VE, VE
JB, JB
VA, VA
编辑2 似乎我发现了这个问题。我在免费软件版本的Toad 5.6 for SQL Server中运行此查询。当我切换到SSMS并删除“into dbo.ModifiedLocation”时,查询引发了熟悉的“传递给LEFT或SUBSTRING函数的无效长度参数”错误。这回答了我的第二个问题。我猜如果我解决了这个错误,我会得到所需的输出。谢谢你的帮助。
答案 0 :(得分:3)
要插入现有表格,您需要INSERT INTO dbo.ModifiedLocation SELECT ...
SELECT ... INTO dbo.ModifiedLocation FROM ...
语法用于创建表格以及插入表格。
关于返回的记录数。除非您有JOIN,WHERE子句,GROUP BY或DISTINCT,否则它应返回源表中存在的完全相同的记录数。
这正是您正在运行的查询吗?