Tentei procurar ao redor, mas não consegui encontrar nada que me ajudasse.
Estou tentando fazer isso no SQL:
declare @locationType varchar(50);
declare @locationID int;
SELECT column1, column2
FROM viewWhatever
WHERE
CASE @locationType
WHEN 'location' THEN account_location = @locationID
WHEN 'area' THEN xxx_location_area = @locationID
WHEN 'division' THEN xxx_location_division = @locationID
Eu sei que não deveria ter que colocar '= @locationID' no final de cada um, mas não consigo obter a sintaxe nem perto de estar correta. O SQL continua reclamando do meu '=' na primeira linha WHEN ...
Como posso fazer isso?
sql
switch-statement
case
Milhas
fonte
fonte
sem uma declaração de caso ...
fonte
DECLARE @locationType NVARCHAR(50) = 'youchoose' IF @locationType = 'location' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (account_location = @locationID) END IF @locationType = 'area' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_area = @locationID) END IF @locationType = 'division' BEGIN SELECT column1, column2 FROM viewWhatever WHERE (xxx_location_division = @locationID) END
Aqui está.
fonte
Eu diria que este é um indicador de uma estrutura defeituosa da tabela. Talvez os diferentes tipos de local devam ser separados em tabelas diferentes, permitindo que você faça consultas muito mais avançadas e também evite ter colunas supérfluas.
Se você não conseguir alterar a estrutura, algo como o abaixo pode funcionar:
E assim por diante ... Não podemos alterar a estrutura da consulta em tempo real, mas podemos substituí-la fazendo com que os predicados se igualem.
EDIT: As sugestões acima são obviamente muito melhores, apenas ignore as minhas.
fonte
O problema disso é que, quando o mecanismo SQL avalia a expressão, ele verifica a parte FROM para obter as tabelas apropriadas e, em seguida, a parte WHERE para fornecer alguns critérios básicos, para que não possa avaliar adequadamente uma condição dinâmica na qual coluna verifique contra.
Você pode usar uma cláusula WHERE ao verificar os critérios WHERE no predicado, como
portanto, no seu caso particular, você precisará colocar a consulta em um procedimento armazenado ou criar três consultas separadas.
fonte
O operador OR pode ser uma alternativa de caso quando em que condição
fonte
Por favor, tente esta consulta. Resposta para post acima:
fonte
Tente o seguinte:
fonte
fonte
fonte
Tente esta consulta. É muito fácil de entender:
fonte