次のクエリの出力に困惑しています。
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 句なしでクエリが正常に実行されるのはなぜですか?
編集 私が達成しようとしていることを説明したいと思います。元のデータセットには、私が興味を持っている 2 つの列、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 関数に渡されました" エラーが発生しました。これは私の2番目の質問に答えます。このエラーを解決すれば、目的の出力が得られると思います。ご協力ありがとうございました。