sql >> Databáze >  >> RDS >> Sqlserver

Nelze použít dočasný sloupec v klauzuli where?

Jedním z řešení by bylo provést podvýběr celého příkazu s použitím klauzule where na jeho výsledek

select  *
from    (
          select  cast(de.ApprovalOrder AS VARCHAR(32)) 
                  + cast(de.EntityCode AS VARCHAR(32)) 
                  + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID'
                  , *
          from    workflow.delegation_engine de
        ) de 
where   de.RowID IS NOT NULL

Dalším řešením by mohlo být opakování celé klauzule v klauzuli WHERE

select  cast(de.ApprovalOrder AS VARCHAR(32)) 
        + cast(de.EntityCode AS VARCHAR(32)) 
        + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID' ,
        *
from    workflow.delegation_engine de
where   cast(de.ApprovalOrder AS VARCHAR(32)) 
        + cast(de.EntityCode AS VARCHAR(32)) 
        + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') IS NOT NULL

Nebo můžete otestovat každé jednotlivé pole na NULL

select  cast(de.ApprovalOrder AS VARCHAR(32)) 
        + cast(de.EntityCode AS VARCHAR(32)) 
        + isnull(cast(de.DelegationCode AS VARCHAR(32)), '') as 'RowID' ,
        *
from    workflow.delegation_engine de
where   de.ApprovalOrder IS NOT NULL
        AND de.EntityCode IS NOT NULL



  1. Elegantní PostgreSQL Group od pro Ruby on Rails / ActiveRecord

  2. Optimalizace dotazu Postgres (vynucení skenování indexu)

  3. Použití proměnné v klauzuli WHERE

  4. hledat v databázi na základě hodnoty vybrané z databáze