Caso na instrução seleccionar

Tenho uma declaração SQL que tem uma de SELECT e não consigo acertar. Vocês podem me mostrar um exemplo de CASE onde os casos são as condições e os resultados são dos casos. Por exemplo:

     Select xxx, yyy
     case : desc case when bbb then 'blackberry';
     when sss then 'samsung';
     end 
     from (select ???? .....

onde os resultados mostram

 name                         age       handphone
xxx1                         yyy1      blackberry
xxx2                         yyy2      blackberry
Author: bobs, 2013-01-07

3 answers

O MSDN é uma boa referência para este tipo de perguntas sobre sintaxe e uso. Isto é da Página de Referência de SQL do Transact.

Http://msdn.microsoft.com/en-us/library/ms181765.aspx

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Name, "Price Range" = 
  CASE 
     WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
     WHEN ListPrice < 50 THEN 'Under $50'
     WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
     WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
     ELSE 'Over $1000'
  END
FROM Production.Product
ORDER BY ProductNumber ;
GO

Outro bom site que poderá querer verificar se está a usar o servidor SQL é o servidor SQL Central . Isto tem uma grande variedade de recursos disponíveis para qualquer área do servidor SQL que você gostaria de aprender.

 169
Author: NuNn DaDdY, 2013-01-07 03:21:28
Acho que isto pode ser útil para ti .

Usando uma instrução SELECT com uma expressão simples CASE

Dentro de uma declaração SELECT, uma expressão simples CASE permite apenas um controlo da igualdade; não são feitas outras comparações. O exemplo a seguir usa a expressão CASE para alterar a visualização das categorias de linhas de produtos para torná-las mais compreensíveis.

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

Usando uma declaração SELECT com um CASEprocurado expressão

Dentro de uma instrução SELECT, a expressão procurada CASE permite que os valores sejam substituídos no conjunto de resultados com base nos valores de comparação. O exemplo seguinte mostra o preço da lista como um comentário de texto baseado na gama de preços de um produto.

USE AdventureWorks2012;
GO
SELECT   ProductNumber, Name, "Price Range" = 
      CASE 
         WHEN ListPrice =  0 THEN 'Mfg item - not for resale'
         WHEN ListPrice < 50 THEN 'Under $50'
         WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250'
         WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000'
         ELSE 'Over $1000'
      END
FROM Production.Product
ORDER BY ProductNumber ;
GO

Utilizar CASE numa cláusula ORDER BY

Os seguintes exemplos usam a expressão CASE numa cláusula ORDER BY para determinar a ordem de ordenação das linhas com base num dado valor da coluna. No primeiro por exemplo, o valor da coluna da Flag assalariada dos Recursos Humanos.A tabela de funcionários é avaliada. Os trabalhadores que têm Aflag assalariada fixada em 1 são devolvidos, por ordem decrescente,pela entidade patronal. Os trabalhadores que têm aflag assalariada fixada em 0 são devolvidos por ordem da entidade empresarial em ordem ascendente. No segundo exemplo, o conjunto de Resultados É ordenado pela coluna territorialidade quando a coluna País nome é igual a 'Estados Unidos' e por País nome para todos carreira.

SELECT BusinessEntityID, SalariedFlag
FROM HumanResources.Employee
ORDER BY CASE SalariedFlag WHEN 1 THEN BusinessEntityID END DESC
        ,CASE WHEN SalariedFlag = 0 THEN BusinessEntityID END;
GO


SELECT BusinessEntityID, LastName, TerritoryName, CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY CASE CountryRegionName WHEN 'United States' THEN TerritoryName
         ELSE CountryRegionName END;

Utilizar CASE numa declaração UPDATE

O exemplo a seguir usa a expressão CASE numa declaração UPDATE para determinar o valor que está definido para as férias da coluna para empregados com Flag assalariado definido como 0. Quando a subtracção de 10 horas às férias resulta num valor negativo, as férias são aumentadas em 40 horas; caso contrário, as férias são aumentadas em 20 horas. A cláusula OUTPUT é usada para mostrar o antes e depois valores de férias.

USE AdventureWorks2012;
GO
UPDATE HumanResources.Employee
SET VacationHours = 
    ( CASE
         WHEN ((VacationHours - 10.00) < 0) THEN VacationHours + 40
         ELSE (VacationHours + 20.00)
       END
    )
OUTPUT Deleted.BusinessEntityID, Deleted.VacationHours AS BeforeValue, 
       Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0; 

Utilizar CASE numa cláusula HAVING

O exemplo a seguir usa a expressão CASE numa cláusula HAVING para restringir as linhas devolvidas pela instrução SELECT. A declaração devolve a taxa horária máxima para cada posto de trabalho nos Recursos Humanos.Mesa de empregados. A cláusula HAVING restringe os títulos àqueles que são detidos por homens com uma taxa salarial máxima superior a 40 dólares ou por mulheres com uma taxa salarial máxima superior a 42 Dólares. dolar.

USE AdventureWorks2012;
GO
SELECT JobTitle, MAX(ph1.Rate)AS MaximumRate
FROM HumanResources.Employee AS e
JOIN HumanResources.EmployeePayHistory AS ph1 ON e.BusinessEntityID = ph1.BusinessEntityID
GROUP BY JobTitle
HAVING (MAX(CASE WHEN Gender = 'M' 
        THEN ph1.Rate 
        ELSE NULL END) > 40.00
     OR MAX(CASE WHEN Gender  = 'F' 
        THEN ph1.Rate  
        ELSE NULL END) > 42.00)
ORDER BY MaximumRate DESC;

Para obter mais detalhes sobre a descrição deste exemplo, visite a fonte .

Também visite aqui e aqui para alguns exemplos com grandes detalhes.

 68
Author: Sabir Al Fateh, 2018-02-03 01:34:30

Também pode utilizar:

SELECT CASE
         WHEN upper(t.name) like 'P%' THEN
          'productive'
         WHEN upper(t.name) like 'T%' THEN
          'test'
         WHEN upper(t.name) like 'D%' THEN
          'development'
         ELSE
          'unknown'
       END as type
FROM table t
 8
Author: user5035983, 2015-06-22 11:31:21