Caso na instrução seleccionar
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
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.
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 CASE
procurado 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.
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