-->SI APPLICA A: SQL Server Database SQL di Azure Azure Synapse Analytics (SQL DW) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse ![Esempi Esempi](/uploads/1/2/6/3/126394442/355575071.jpg)
![Libreoffice Libreoffice](http://lilypond.org/doc/v2.19/Documentation/pictures/bwv861-lilypond-large.png)
The Apache OpenOffice User Forum is an user to user help and discussion forum for exchanging information and tips with other users of Apache OpenOffice, the open source office suite. Here you can download free mountain goats bitter melon farm shared files found in our database: Bitter Melon Farm.zip from mediafire.com.
Valuta un elenco di condizioni e restituisce una tra più espressioni di risultato possibili.Evaluates a list of conditions and returns one of multiple possible result expressions.
L'espressione CASE ha due formati:The CASE expression has two formats:
- L'espressione CASE semplice confronta un'espressione con un set di espressioni semplici per determinare il risultato.The simple CASE expression compares an expression to a set of simple expressions to determine the result.
- L'espressione CASE avanzata valuta un set di espressioni booleane per determinare il risultato.The searched CASE expression evaluates a set of Boolean expressions to determine the result.
Entrambi i formati supportano un argomento facoltativo ELSE.Both formats support an optional ELSE argument.
L'espressione CASE può essere utilizzata in qualsiasi istruzione o clausola che consenta un'espressione valida.CASE can be used in any statement or clause that allows a valid expression.È possibile, ad esempio, utilizzare CASE in istruzioni quali SELECT, UPDATE, DELETE e SET e in clausole quali select_list, IN, WHERE, ORDER BY e HAVING.For example, you can use CASE in statements such as SELECT, UPDATE, DELETE and SET, and in clauses such as select_list, IN, WHERE, ORDER BY, and HAVING.
Convenzioni della sintassi Transact-SQLTransact-SQL Syntax Conventions
SintassiSyntax
ArgomentiArguments
input_expressioninput_expression
Espressione valutata quando viene utilizzato il formato CASE semplice.Is the expression evaluated when the simple CASE format is used.input_expression è qualsiasi espressione valida.input_expression is any valid expression.
Espressione valutata quando viene utilizzato il formato CASE semplice.Is the expression evaluated when the simple CASE format is used.input_expression è qualsiasi espressione valida.input_expression is any valid expression.
![Esempi Esempi](/uploads/1/2/6/3/126394442/355575071.jpg)
![Libreoffice Libreoffice](http://lilypond.org/doc/v2.19/Documentation/pictures/bwv861-lilypond-large.png)
WHEN when_expressionWHEN when_expression
Espressione semplice con cui viene confrontato input_expression quando viene usato il formato CASE semplice.Is a simple expression to which input_expression is compared when the simple CASE format is used.when_expression è qualsiasi espressione valida.when_expression is any valid expression.A input_expression e a ogni occorrenza di when_expression deve essere associato lo stesso tipo di dati o un tipo di dati convertibile in modo implicito.The data types of input_expression and each when_expression must be the same or must be an implicit conversion.
Espressione semplice con cui viene confrontato input_expression quando viene usato il formato CASE semplice.Is a simple expression to which input_expression is compared when the simple CASE format is used.when_expression è qualsiasi espressione valida.when_expression is any valid expression.A input_expression e a ogni occorrenza di when_expression deve essere associato lo stesso tipo di dati o un tipo di dati convertibile in modo implicito.The data types of input_expression and each when_expression must be the same or must be an implicit conversion.
THEN result_expressionTHEN result_expression
Espressione restituita quando input_expression uguale a when_expression restituisce TRUE o Boolean_expression restituisce TRUE.Is the expression returned when input_expression equals when_expression evaluates to TRUE, or Boolean_expression evaluates to TRUE.result_expression è qualsiasi espressione valida.result expression is any valid expression.
Espressione restituita quando input_expression uguale a when_expression restituisce TRUE o Boolean_expression restituisce TRUE.Is the expression returned when input_expression equals when_expression evaluates to TRUE, or Boolean_expression evaluates to TRUE.result_expression è qualsiasi espressione valida.result expression is any valid expression.
ELSE else_result_expressionELSE else_result_expression
Espressione restituita quando nessuna operazione di confronto restituisce TRUE.Is the expression returned if no comparison operation evaluates to TRUE.Se questo argomento viene omesso e nessuna operazione di confronto restituisce TRUE, CASE restituisce NULL.If this argument is omitted and no comparison operation evaluates to TRUE, CASE returns NULL.else_result_expression è qualsiasi espressione valida.else_result_expression is any valid expression.A else_result_expression e a ogni occorrenza di result_expression deve essere associato lo stesso tipo di dati o un tipo di dati convertibile in modo implicito.The data types of else_result_expression and any result_expression must be the same or must be an implicit conversion.
Espressione restituita quando nessuna operazione di confronto restituisce TRUE.Is the expression returned if no comparison operation evaluates to TRUE.Se questo argomento viene omesso e nessuna operazione di confronto restituisce TRUE, CASE restituisce NULL.If this argument is omitted and no comparison operation evaluates to TRUE, CASE returns NULL.else_result_expression è qualsiasi espressione valida.else_result_expression is any valid expression.A else_result_expression e a ogni occorrenza di result_expression deve essere associato lo stesso tipo di dati o un tipo di dati convertibile in modo implicito.The data types of else_result_expression and any result_expression must be the same or must be an implicit conversion.
WHEN Boolean_expressionWHEN Boolean_expression
Espressione booleana valutata quando viene utilizzato il formato CASE avanzato.Is the Boolean expression evaluated when using the searched CASE format.Boolean_expression è qualsiasi espressione booleana valida.Boolean_expression is any valid Boolean expression.
Espressione booleana valutata quando viene utilizzato il formato CASE avanzato.Is the Boolean expression evaluated when using the searched CASE format.Boolean_expression è qualsiasi espressione booleana valida.Boolean_expression is any valid Boolean expression.
Tipi restituitiReturn Types
Restituisce il tipo con precedenza maggiore nel set di tipi in result_expressions e l'argomento facoltativo else_result_expression.Returns the highest precedence type from the set of types in result_expressions and the optional else_result_expression.Per altre informazioni, vedere Precedenza dei tipi di dati (Transact-SQL).For more information, see Data Type Precedence (Transact-SQL).
Valori restituitiReturn Values
Espressione CASE semplice:Simple CASE expression:
L'espressione CASE semplice confronta la prima espressione con l'espressione in ogni clausola WHEN per determinarne l'equivalenza.The simple CASE expression operates by comparing the first expression to the expression in each WHEN clause for equivalency.Se le espressioni sono equivalenti, viene restituita l'espressione nella clausola THEN.If these expressions are equivalent, the expression in the THEN clause will be returned.
- Consente solo un controllo di uguaglianza.Allows only an equality check.
- Nell'ordine specificato, restituisce input_expression = when_expression per ogni clausola WHEN.In the order specified, evaluates input_expression = when_expression for each WHEN clause.
- Restituisce l'argomento result_expression del primo confronto input_expression = when_expression che restituisce TRUE.Returns the result_expression of the first input_expression = when_expression that evaluates to TRUE.
- Se nessun confronto input_expression = when_expression restituisce TRUE, il Motore di database di SQL ServerSQL Server Database Engine restituisce else_result_expression se è stata specificata una clausola ELSE. In caso contrario, restituisce un valore Null.If no input_expression = when_expression evaluates to TRUE, the Motore di database di SQL ServerSQL Server Database Engine returns the else_result_expression if an ELSE clause is specified, or a NULL value if no ELSE clause is specified.
Espressione CASE avanzata:Searched CASE expression:
- Valuta nell'ordine specificato Boolean_expression per ogni clausola WHEN.Evaluates, in the order specified, Boolean_expression for each WHEN clause.
- Restituisce result_expression del primo argomento Boolean_expression che restituisce TRUE.Returns result_expression of the first Boolean_expression that evaluates to TRUE.
- Se nessun confronto Boolean_expression restituisce TRUE, il Motore di databaseDatabase Engine restituisce else_result_expression se è stata specificata una clausola ELSE. In caso contrario, restituisce un valore Null.If no Boolean_expression evaluates to TRUE, the Motore di databaseDatabase Engine returns the else_result_expression if an ELSE clause is specified, or a NULL value if no ELSE clause is specified.
RemarksRemarks
SQL ServerSQL Serverconsente solo 10 livelli di nidificazione nelle espressioni CASE.allows for only 10 levels of nesting in CASE expressions.
L'espressione CASE non può essere utilizzata per controllare il flusso di esecuzione di istruzioni, blocchi di istruzioni, funzioni definite dall'utente e stored procedure Transact-SQL.The CASE expression cannot be used to control the flow of execution of Transact-SQL statements, statement blocks, user-defined functions, and stored procedures.Per un elenco di metodi di controllo di flusso, vedere Controllo di flusso (Transact-SQL).For a list of control-of-flow methods, see Control-of-Flow Language (Transact-SQL).
Con l'espressione CASE è possibile valutare in sequenza le relative condizioni e viene arrestata alla prima condizione soddisfatta.The CASE expression evaluates its conditions sequentially and stops with the first condition whose condition is satisfied.In alcune situazioni, un'espressione viene valutata prima che in un'espressione CASE vengano ricevuti i risultati dell'espressione come input.In some situations, an expression is evaluated before a CASE expression receives the results of the expression as its input.È possibile che si verifichino errori nella valutazione di queste espressioni.Errors in evaluating these expressions are possible.Le espressioni di aggregazione visualizzate negli argomenti WHEN di un'espressione CASE vengono innanzitutto valutate e, successivamente, fornite all'espressione CASE.Aggregate expressions that appear in WHEN arguments to a CASE expression are evaluated first, then provided to the CASE expression.Ad esempio, nella query seguente si verifica un errore di divisione per zero durante la generazione del valore dell'aggregazione MAX.For example, the following query produces a divide by zero error when producing the value of the MAX aggregate.Questa condizione si presenta prima della valutazione dell'espressione CASE.This occurs prior to evaluating the CASE expression.
È necessario dipendere dall'ordine di valutazione delle condizioni WHEN solo per le espressioni scalari (incluse le sottoquery non correlate tramite cui vengono restituiti scalari), non per le espressioni di aggregazione.You should only depend on order of evaluation of the WHEN conditions for scalar expressions (including non-correlated sub-queries that return scalars), not for aggregate expressions.
EsempiExamples
A.A.Utilizzo di un'istruzione SELECT con un'espressione CASE sempliceUsing a SELECT statement with a simple CASE expression
In un'istruzione
SELECT
un'espressione CASE
semplice consente di eseguire solo un controllo di uguaglianza senza ulteriori confronti.Within a SELECT
statement, a simple CASE
expression allows for only an equality check; no other comparisons are made.Nell'esempio seguente viene utilizzata l'espressione CASE
per modificare la visualizzazione delle categorie delle linee di prodotti in modo da renderle più intuitive.The following example uses the CASE
expression to change the display of product line categories to make them more understandable.B.B.Utilizzo di un'istruzione SELECT con un'espressione CASE avanzataUsing a SELECT statement with a searched CASE expression
In un'istruzione
SELECT
l'espressione CASE
avanzata consente di sostituire valori nel set di risultati in base ai valori di confronto.Within a SELECT
statement, the searched CASE
expression allows for values to be replaced in the result set based on comparison values.Nell'esempio seguente viene visualizzato il prezzo di listino come commento di testo in base alla fascia di prezzi per un prodotto.The following example displays the list price as a text comment based on the price range for a product.C.C.Utilizzo di CASE in una clausola ORDER BYUsing CASE in an ORDER BY clause
Nell'esempio seguente viene utilizzata l'espressione CASE in una clausola ORDER BY per determinare l'ordinamento delle righe in base al valore di una colonna.The following examples uses the CASE expression in an ORDER BY clause to determine the sort order of the rows based on a given column value.Nel primo esempio, viene calcolato il valore nella colonna
SalariedFlag
della tabella HumanResources.Employee
.In the first example, the value in the SalariedFlag
column of the HumanResources.Employee
table is evaluated.I dipendenti per cui SalariedFlag
è impostato su 1 vengono restituiti in ordine decrescente in base a BusinessEntityID
.Employees that have the SalariedFlag
set to 1 are returned in order by the BusinessEntityID
in descending order.I dipendenti per cui SalariedFlag
è impostato su 0 vengono restituiti in ordine crescente in base a BusinessEntityID
.Employees that have the SalariedFlag
set to 0 are returned in order by the BusinessEntityID
in ascending order.Nel secondo esempio il set di risultati viene ordinato in base alla colonna TerritoryName
quando la colonna CountryRegionName
è uguale a 'United States' e in base a CountryRegionName
per tutte le altre righe.In the second example, the result set is ordered by the column TerritoryName
when the column CountryRegionName
is equal to 'United States' and by CountryRegionName
for all other rows.D.D.Utilizzo di CASE in un'istruzione UPDATEUsing CASE in an UPDATE statement
Nell'esempio seguente viene utilizzata l'espressione CASE in un'istruzione UPDATE per determinare il valore impostato per la colonna
VacationHours
per i dipendenti per cui SalariedFlag
è impostato su 0.The following example uses the CASE expression in an UPDATE statement to determine the value that is set for the column VacationHours
for employees with SalariedFlag
set to 0.Se sottraendo 10 ore da VacationHours
viene restituito un valore negativo, VacationHours
viene aumentato di 40 ore; in caso contrario, VacationHours
viene aumentato di 20 ore.When subtracting 10 hours from VacationHours
results in a negative value, VacationHours
is increased by 40 hours; otherwise, VacationHours
is increased by 20 hours.La clausola OUTPUT viene utilizzata per visualizzare i valori precedenti e successivi alle ferie.The OUTPUT clause is used to display the before and after vacation values.E.E.Utilizzo di CASE in un'istruzione SETUsing CASE in a SET statement
Negli esempi seguenti viene utilizzata l'espressione CASE in un'istruzione SET nella funzione con valori di tabella
dbo.GetContactInfo
.The following example uses the CASE expression in a SET statement in the table-valued function dbo.GetContactInfo
.Nel database AdventureWorks2012AdventureWorks2012 tutti i dati correlati alle persone vengono archiviati nella tabella Person.Person
.In the AdventureWorks2012AdventureWorks2012 database, all data related to people is stored in the Person.Person
table.La persona, ad esempio, può essere un dipendente, un rappresentante del fornitore o un cliente.For example, the person may be an employee, vendor representative, or a customer.La funzione restituisce il nome e il cognome di un elemento BusinessEntityID
specifico e il tipo di contatto per tale persona. L'espressione CASE nell'istruzione SET determina il valore da visualizzare per la colonna ContactType
in base all'esistenza della colonna BusinessEntityID
nelle tabelle Employee
, Vendor
o Customer
.The function returns the first and last name of a given BusinessEntityID
and the contact type for that person.The CASE expression in the SET statement determines the value to display for the column ContactType
based on the existence of the BusinessEntityID
column in the Employee
, Vendor
, or Customer
tables.F.F.Utilizzo di CASE in una clausola HAVINGUsing CASE in a HAVING clause
Nell'esempio seguente viene utilizzata l'espressione CASE in una clausola HAVING per limitare le righe restituite dall'istruzione SELECT.The following example uses the CASE expression in a HAVING clause to restrict the rows returned by the SELECT statement.L'istruzione restituisce la retribuzione oraria massima per ogni titolo professionale nella tabella
HumanResources.Employee
.The statement returns the maximum hourly rate for each job title in the HumanResources.Employee
table.La clausola HAVING limita i titoli professionali a quelli associati a uomini con una retribuzione massima maggiore di 40 dollari o a donne con una retribuzione massima maggiore di 42 dollari.The HAVING clause restricts the titles to those that are held by men with a maximum pay rate greater than 40 dollars or women with a maximum pay rate greater than 42 dollars.Esempi: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) e Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL DW)Azure Synapse Analytics (SQL DW) and Parallel Data WarehouseParallel Data Warehouse
G.G.Uso di un'istruzione SELECT con un'espressione CASEUsing a SELECT statement with a CASE expression
In un'istruzione SELECT l'espressione CASE avanzata consente di sostituire valori nel set di risultati in base ai valori di confronto.Within a SELECT statement, the CASE expression allows for values to be replaced in the result set based on comparison values.Nell'esempio seguente viene usata l'espressione CASE per modificare la visualizzazione delle categorie delle linee di prodotti in modo da renderle più intuitive.The following example uses the CASE expression to change the display of product line categories to make them more understandable.Se un valore non esiste, viene visualizzato il testo 'Not for sale'.When a value does not exist, the text 'Not for sale' is displayed.
H.H.Utilizzo di CASE in un'istruzione UPDATEUsing CASE in an UPDATE statement
Nell'esempio seguente viene utilizzata l'espressione CASE in un'istruzione UPDATE per determinare il valore impostato per la colonna
VacationHours
per i dipendenti per cui SalariedFlag
è impostato su 0.The following example uses the CASE expression in an UPDATE statement to determine the value that is set for the column VacationHours
for employees with SalariedFlag
set to 0.Se sottraendo 10 ore da VacationHours
viene restituito un valore negativo, VacationHours
viene aumentato di 40 ore; in caso contrario, VacationHours
viene aumentato di 20 ore.When subtracting 10 hours from VacationHours
results in a negative value, VacationHours
is increased by 40 hours; otherwise, VacationHours
is increased by 20 hours.Vedere ancheSee Also
Espressioni (Transact-SQL)Expressions (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
COALESCE (Transact-SQL)COALESCE (Transact-SQL)
IIF (Transact-SQL)IIF (Transact-SQL)
CHOOSE (Transact-SQL)CHOOSE (Transact-SQL)
SELECT (Transact-SQL)SELECT (Transact-SQL)
COALESCE (Transact-SQL)COALESCE (Transact-SQL)
IIF (Transact-SQL)IIF (Transact-SQL)
CHOOSE (Transact-SQL)CHOOSE (Transact-SQL)