1

MS SQL で問題が発生しました。
次のように、ビューに多くのステートメントを含む CASE を使用しています。

select
e.[Nom d'annuaire],
e.[Prénom annuaire],
f.[Nom d'annuaire en UTF-8] AS login,
e.Usagers as [Numéro interne],
d.[Numéro externe],
s.[Préfixe No abr direct],
v.fonction,

  CASE
           WHEN v.lib_delegation = 'Service informatique' THEN 'Euralille'
           WHEN v.delegation = 'test_national' THEN 'Maillot'
           WHEN v.delegation = 'test_tpe' THEN 'Maillot'
           WHEN v.delegation = 'test_paris-idf' THEN 'Maillot'
           WHEN v.delegation = 'test_grands-comptes' THEN 'Maillot'
           WHEN v.delegation = 'cotestrm' THEN 'Marcq en baroeul'
           WHEN v.delegation = 'test_sud-ouest' THEN 'Bruges'
           WHEN v.delegation = 'test_normandie' THEN 'Caen'
           WHEN v.delegation = 'test_bourgogne' THEN 'Dijon'
           WHEN v.delegation = 'test_ouest' THEN 'Ouest'
           WHEN v.lib_delegation = 'Centre Limousin' THEN 'Tours'
           WHEN v.delegation = 'test_est' THEN 'Nancy'
           WHEN v.delegation = 'test_mediterranee' THEN 'Aix'
           WHEN v.delegation = 'test_rhone-alpes' THEN 'Lyon'
           ELSE v.delegation
        END AS Délégation,
        v.lib_delegation

from ale e 

INNER JOIN ale f
on e.Usagers = f.Usagers AND f.[No alias] = 1 and e.[No Alias] = 0

INNER JOIN Delegation d
on f.Usagers = d.[No annuaire]

INNER JOIN V_users v
on v.LOGIN = f.[Nom d'annuaire en UTF-8]

LEFT OUTER JOIN svi s
on e.Usagers = s.[No d'appel] 

order by e.Usagers

ご覧のとおり、私の CASE ステートメントはネストされていません。これは、WHEN... THEN ...構文を使用してから単純にELSE ... ENDステートメントを配置したためです。

ただし、たとえば filter を使用して出力をフィルタリングしようとすると:

WHERE [Délégation] = 'Euralille'

2 つのエラーが表示されます:
メッセージ 8180、レベル 16、状態 1、行 1
メッセージ 125、レベル 15、状態 4、行 1

エラー番号の説明:

  • メッセージ 8180 = ステートメントを準備できませんでした。
  • メッセージ 125 = Case 式はレベル %d にのみネストできます。

(フランス語の翻訳が下手で申し訳ありません)
私は MS SQL Web サイトと StackOverflow で答えを探していましたが、問題は常に CASE ステートメントがネストされていることです。しかし、私にとって、私はこの状況にありません...

よろしくお願いします、私はこの世界ではかなりの初心者です。

4

1 に答える 1

0

このようにフィルタリングしましたか?すべてのクエリをサブクエリに入れてから、後で where 句を適用したことに注意してください。

select * from 
(select
e.[Nom d'annuaire],
e.[Prénom annuaire],
f.[Nom d'annuaire en UTF-8] AS login,
e.Usagers as [Numéro interne],
d.[Numéro externe],
s.[Préfixe No abr direct],
v.fonction,

  CASE
           WHEN v.lib_delegation = 'Service informatique' THEN 'Euralille'
           WHEN v.delegation = 'test_national' THEN 'Maillot'
           WHEN v.delegation = 'test_tpe' THEN 'Maillot'
           WHEN v.delegation = 'test_paris-idf' THEN 'Maillot'
           WHEN v.delegation = 'test_grands-comptes' THEN 'Maillot'
           WHEN v.delegation = 'cotestrm' THEN 'Marcq en baroeul'
           WHEN v.delegation = 'test_sud-ouest' THEN 'Bruges'
           WHEN v.delegation = 'test_normandie' THEN 'Caen'
           WHEN v.delegation = 'test_bourgogne' THEN 'Dijon'
           WHEN v.delegation = 'test_ouest' THEN 'Ouest'
           WHEN v.lib_delegation = 'Centre Limousin' THEN 'Tours'
           WHEN v.delegation = 'test_est' THEN 'Nancy'
           WHEN v.delegation = 'test_mediterranee' THEN 'Aix'
           WHEN v.delegation = 'test_rhone-alpes' THEN 'Lyon'
           ELSE v.delegation
        END AS Délégation,
        v.lib_delegation

from ale e 

INNER JOIN ale f
on e.Usagers = f.Usagers AND f.[No alias] = 1 and e.[No Alias] = 0

INNER JOIN Delegation d
on f.Usagers = d.[No annuaire]

INNER JOIN V_users v
on v.LOGIN = f.[Nom d'annuaire en UTF-8]

LEFT OUTER JOIN svi s
on e.Usagers = s.[No d'appel] 

order by e.Usagers) as subTotalQuery
WHERE [Délégation] = 'Euralille'
于 2013-05-02T10:57:52.380 に答える