Con più domande
sql - errore ?

Domanda
-
salve
non capisco dove sbaglio
se scrivo in una query
SELECT
cFORNITORE, CAMPO1
CASE WHEN [CAMPO1] IS NOT NULL THEN 'pieno' ELSE [cFORNITORE] END
FROM miaTABELLA
funziona ma se scrivo
CASE WHEN [CAMPO1] IS NOT NULL THEN 'pieno' + [Campo1] ELSE [cFORNITORE] END
non lo accetta.
dove sbaglio? vorrei visualizzare il valore di [CAMPO1] se c'e' altrimenti [cFORNITORE]
GRAZIE A TUTTI ANTICIPATAMENTE
Tutte le risposte
-
-
Ciao,
Ho riprodotto in locale la situazione della tua domanda e l'errore lo puoi avere già a livello di sintassi dal momento in cui selezioni la colonna CAMPO1 a cui segue il costrutto CASE senza separatore virgola (,). Seguendo la tua richiesta, la query corretta dovrebbe essere la seguente:
SELECT cFORNITORE, CASE WHEN CAMPO1 IS NOT NULL THEN 'pieno ' + CAMPO1 ELSE cFORNITORE END FROM miaTABELLA
Come vedi, la seconda colonna selezionata non sarà sempre "pieno" seguito CAMPO1 come nel tuo primo esempio ma potrà essere anche cFornitore.
Fammi sapere se hai dubbi su questa soluzione, in ogni caso ti lascio il link alla documentazione del CASE in SQL Server: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/case-transact-sql
A presto
- Modificato Gabriele Etta giovedì 5 ottobre 2017 07:04 Aggiunta documentazione CASE
- Contrassegnato come risposta pfmarro giovedì 5 ottobre 2017 09:20
- Contrassegno come risposta annullato pfmarro giovedì 5 ottobre 2017 09:20
- Proposto come risposta Gabriele Etta giovedì 5 ottobre 2017 09:22
- Proposta come risposta annullata Gabriele Etta giovedì 5 ottobre 2017 09:25
-
Grazie dell'interessamento
il problema non riesco a risolverlo
non capisco
se scrivo
SELECT cFORNITORE, CASE WHEN CAMPO1 IS NOT NULL THEN 'pieno ' ELSE cFORNITORE END FROM miaTABELLA
funziona
ma se metto nel caso True (cioe' solo se non e' nullo CAMPO1)
SELECT cFORNITORE, CASE WHEN CAMPO1 IS NOT NULL THEN CAMPO1 ELSE cFORNITORE END FROM miaTABELLA
MI SCRIVE CONFLITTO DI INTERAZIONE
POTETE AIUTARMI A risolvere il problema? anche perche' non posso utilizzare un campo calcolato in un altro campo calcolato
GRAZIE
-
-
no il campo1 e' un campo
SELECT
cFORNITORE,
CASE
WHEN CAMPO1 IS NOT NULL THEN CAMPO1 ELSE cFORNITORE
END
FROM miaTABELLA
pensavo di aggirare il tutto facendo ma mi pare che non sia possibile testare il valore di un campo calcolato
SELECT
cFORNITORE,
CASE
WHEN CAMPO1 IS NOT NULL THEN 0 ELSE cFORNITORE
END as tmpCASE
WHEN tmp = 0 THEN campo1 ELSE cFORNITORE
END as tmpFROM miaTABELLA
-
Ciao,
SELECT cFORNITORE, CASE WHEN CAMPO1 IS NOT NULL THEN 0 ELSE cFORNITORE END as tmp CASE WHEN tmp = 0 THEN campo1 ELSE cFORNITORE END as tmp FROM miaTABELLA
Questa query è errata dal punto di vista sintattico in quanto la visibilità di tmp non si ha a seguito della sua dichiarazione: non si comporta come un linguaggio imperativo sotto questo punto di vista.
Per rispondere meglio alla tua domanda avrei bisogno di vedere lo script di creazione di miaTabella, ma se CAMPO1 è davvero un campo non calcolato allora la soluzione di prima dovrebbe funzionare dal momento che l'ho anche testata in locale con campi non calcolati e oltretutto ha la stessa semantica di quello che vorresti fare senza passare da strutture d'appoggio.
Rimango a disposizione per ulteriori chiarimenti, ma per le prossime volte cerca di esprimere meglio anche il contesto in cui si pone la domanda in modo tale da avere un'idea completa già alla prima risposta.A presto