からSELECT
までのSQLステートメントがありますが、それは正しくできません。皆さんは私にCASE
という例を表示できますか?ケースは条件であり、結果はケースからのものです。例:結果はSelectステートメントでのケース
name age handphone
xxx1 yyy1 blackberry
xxx2 yyy2 blackberry
からSELECT
までのSQLステートメントがありますが、それは正しくできません。皆さんは私にCASE
という例を表示できますか?ケースは条件であり、結果はケースからのものです。例:結果はSelectステートメントでのケース
name age handphone
xxx1 yyy1 blackberry
xxx2 yyy2 blackberry
を見せる
Select xxx, yyy
case : desc case when bbb then 'blackberry';
when sss then 'samsung';
end
from (select ???? .....
MSDNには、構文と使用方法に関する質問のこれらのタイプのために良いリファレンスです。これはTransact SQL Reference - CASEページのものです。
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
あなたは、SQL Serverを使用しているかどうかをチェックすることをお勧めしますもう一つの良いサイトがSQL Server Centralです。これには、学習したいSQL Serverのどの領域でも利用可能な多種多様なリソースがあります。
あなたも使用することができます。
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
私はこれらがあなたのために役立つことができると思い。シンプルCASE
表現SELECT
声明の中で
、シンプルCASE
式は唯一の等価性チェックを可能とSELECT
ステートメントを使用して
。他の比較は行われない。次の例では、CASE
式を使用して、製品ラインカテゴリの表示を変更して理解しやすくしています。
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
、検索CASE
発現SELECT
ステートメント内
とSELECT
ステートメントを使用して値が比較値に基づいて結果セットに交換する検索CASE
発現が可能となります。次の例では、製品の価格帯に基づいてテキストのコメントとして価格を表示します。以下の実施例ORDER BY
句でCASE
を使用
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
は、与えられた列の値に基づいて行のソート順を決定するORDER BY
句でCASE
式を使用。最初の例では、HumanResources.EmployeeテーブルのSalariedFlagカラムの値が評価されます。 SalariedFlagが1に設定されている従業員は、BusinessEntityIDによって降順で順番に返されます。 SalariedFlagが0に設定されている従業員は、BusinessEntityIDによって昇順で順番に返されます。 2番目の例では、CountryRegionName列が 'United States'列で、他のすべての列でCountryRegionName列の場合、結果セットは列TerritoryNameによって順序付けられます。
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;
UPDATE
ステートメントでCASE
を使用
次の例では、0場合にSalariedFlagが設定された従業員の列VacationHoursに設定された値を決定するために、UPDATE
文でCASE
式を使用VacationHoursから10時間を引いた値が負の値の場合、VacationHoursは40時間増加します。それ以外の場合、VacationHoursは20時間増加します。 OUTPUT
句は、休暇の前後の値を表示するために使用されます。
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;
HAVING
句でCASE
を使用して
次の例では、SELECT
ステートメントによって返される行を制限するためにHAVING
句でCASE
式を使用しています。このステートメントは、HumanResources.Employee表の各ジョブ・タイトルの最大時間率を戻します。 HAVING
句は、最高賃金率が40ドルを超える男性または最高賃金率が42ドルを超える女性が保有するものにタイトルを限定します。
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;
これらの例の詳細については、sourceを参照してください。
2つのケースの種類を説明する[私の答え](http://stackoverflow.com/a/38874485/1045444)1.単純なケースの式2.検索されたケースの式。また、両方の型のケースの使用法は、SELECT、UPDATE、ORDER BY、HAVINGクエリを使用します。 –