1

我对以下查询的输出感到困惑:

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
  1. Location 表包含 25385 条记录,但仅返回 8157 条记录。为什么会过滤掉记录?

  2. 当我尝试将 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 函数的长度参数无效”错误。这回答了我的第二个问题。我猜如果我解决了这个错误,我会得到想要的输出。感谢您的帮助。

4

1 回答 1

3

要插入现有表,您需要INSERT INTO dbo.ModifiedLocation SELECT ...

SELECT ... INTO dbo.ModifiedLocation FROM ...语法用于创建表以及插入其中。


至于返回的记录数。除非您有 JOIN、WHERE 子句、GROUP BY 或 DISTINCT,否则这应该返回与源表中存在的记录数完全相同的记录。

这正是您正在运行的查询吗?

于 2011-12-31T00:35:01.637 回答