我对以下查询的输出感到困惑:
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
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 并删除“进入 dbo.ModifiedLocation”时,查询引发了熟悉的“传递给 LEFT 或 SUBSTRING 函数的长度参数无效”错误。这回答了我的第二个问题。我猜如果我解决了这个错误,我会得到想要的输出。感谢您的帮助。