'한' 에서 '어떻게 수행합니까 이프스탕 SQL SELECT' 기술서임을?
예를 들면 다음과 같습니다.
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
Sql 의 경우 이 '사건' 에 가장 근접한 기술서임을 SQL Server 의 모든 버전에서 사용할 수 있습니다.
SELECT CAST(
CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END AS bit) as Saleable, *
FROM Product
그 결과 '캐스트' 로 해야 됩니다 스케쳐내 부울 값. 이 작품을 통해 ',' 행복한 경우 int:
SELECT CASE
WHEN Obsolete = 'N' or InStock = 'Y'
THEN 1
ELSE 0
END as Saleable, *
FROM Product
'케이스' 다른 '케이스' 명령문입니다 심지어 취합합니다 포함된 명령문입니다 포함할 수 있습니다.
SQL Server 디날리아이티 (SQL Server 2012년) 에서 사용할 수 있는 수도 있는 기술서임을 추가하므로 [세프] [1] 액세스만 ("이라고 지적했다. [3] 에서 [마틴 스미스]).
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
[1]: sql.110%29.aspx http://msdn.microsoft.com/en-us/library/hh213574%28v =
[3]: # 6769805 https://stackoverflow.com/questions/63447/how-do-you-perform-an-if-then-in-an-sql-select/6769805
네 친구가 이 상황, 많은 경우 문이 두 가지 양식:
단순 사례:
SELECT CASE <variable> WHEN <value> THEN <returnvalue>
WHEN <othervalue> THEN <returnthis>
ELSE <returndefaultcase>
END AS <newcolumnname>
FROM <table>
확장 사례:
SELECT CASE WHEN <test> THEN <returnvalue>
WHEN <othertest> THEN <returnthis>
ELSE <returndefaultcase>
END AS <newcolumnname>
FROM <table>
Order by 절을 돌림무늬 오더할 상행담관염이라고 대한 작업공간에서 제표를 로켈이 동일팔레트에 수도 있습니다.
Sql Server 2012년 에서 사용할 수 있습니다. [ '' 세프 함수] [1] 엔드입니다.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
이는 단순한 속기 (비록 필터링되지 표준 SQL) 방법을 효과적으로 먹어서나 '케이스'.
내가 선호하는 간결 비교했을 때 확장됨 '케이스' 버전.
세프 () '와' 케이스 '로 모두' 해결하십시오 표현식에서는 SQL 문 내에서 사용되는 이벤트여야만 잘 수 있다.
>. 이 CASE 표현식에는 실행 흐름을 제어하는 데 사용할 수 없습니다. >. Transact-SQL 명령문입니다, 기술서임을 블록, 사용자 지정 함수 및 >. 저장 프로시저.
필요에 의해 달성됨 이러한 한계를 극복할 수 없는 경우 (예를 들어, 그 결과 몇 가지 조건을 종속적임 복귀하십시오 모양의 설정합니까 다르게 하는) 그런 다음 SQL Server 는 또한 절차적 "만약 ' 키워드.
IF @IncludeExtendedInformation = 1
BEGIN
SELECT A,B,C,X,Y,Z
FROM T
END
ELSE
BEGIN
SELECT A,B,C
FROM T
END
만족 합니다 이 문제를 피하기 위해 때로는 수행됨을 매개변수입니다 스니핑 외곽진입 하지만.
[1]: 이아스파스 http://msdn.microsoft.com/en-us/library/hh213574 (v = sql.110)
일부 찾을 수 있는 좋은 예에 The Power of SQL 경우 명령문입니다 및 기술서임을 사용할 수 있는 이 같은 일이 될 것 같아요 () 의 4guysfromrolla).
SELECT
FirstName, LastName,
Salary, DOB,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END
FROM Employees
1 에서 [이 링크] '에서' 만일 우리가 이해할 수 있고, 다른 T-SQL.
IF EXISTS(SELECT *
FROM Northwind.dbo.Customers
WHERE CustomerId = 'ALFKI')
PRINT 'Need to update Customer Record ALFKI'
ELSE
PRINT 'Need to add Customer Record ALFKI'
IF EXISTS(SELECT *
FROM Northwind.dbo.Customers
WHERE CustomerId = 'LARSE')
PRINT 'Need to update Customer Record LARSE'
ELSE
PRINT 'Need to add Customer Record LARSE'
간단한 다른 경우 문을 빨리 sql&; 서버:
DECLARE @val INT;
SET @val = 15;
IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';
GO
Server 문에 네스트된 이프리얼스 SQL& nbsp;;
DECLARE @val INT;
SET @val = 15;
IF @val < 25
PRINT 'Hi Ravi Anand.';
ELSE
BEGIN
IF @val < 50
PRINT 'what''s up?';
ELSE
PRINT 'Bye Ravi Anand.';
END;
GO
순결케 비트를 사용하여 논리를 폈다.
DECLARE @Product TABLE (
id INT PRIMARY KEY IDENTITY NOT NULL
,Obsolote CHAR(1)
,Instock CHAR(1)
)
INSERT INTO @Product ([Obsolote], [Instock])
VALUES ('N', 'N'), ('N', 'Y'), ('Y', 'Y'), ('Y', 'N')
;
WITH cte
AS
(
SELECT
'CheckIfInstock' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Instock], 'Y'), 1), 'N'), 0) AS BIT)
,'CheckIfObsolote' = CAST(ISNULL(NULLIF(ISNULL(NULLIF(p.[Obsolote], 'N'), 0), 'Y'), 1) AS BIT)
,*
FROM
@Product AS p
)
SELECT
'Salable' = c.[CheckIfInstock] & ~c.[CheckIfObsolote]
,*
FROM
[cte] c
참조 [apc® 데모: 만일 ',' 의 경우 SQL& 없이 사용할 수 있을 만큼, 서버] [1].
시작, "진짜 '가치' 와 '거짓' 에 대해 작업해야 하는 아웃해야 선택한 로드하십시오. 여기에 두 가지 누이프] [3]:
for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)
보기입니다 결합되어 1 또는 0. 비트단위 운영자 다음 사용합니다.
[1]: 3/0b900/3/0 http://sqlfiddle.com/ #!
[3]: 2017년 보기 = sql server https://docs.microsoft.com/en-us/sql/t-sql/language-elements/nullif-transact-sql?
CASE orweb2.dbo.Inventory.RegulatingAgencyName
WHEN 'Region 1'
THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
WHEN 'Region 2'
THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
WHEN 'Region 3'
THEN orweb2.dbo.CountyStateAgContactInfo.ContactState
WHEN 'DEPT OF AGRICULTURE'
THEN orweb2.dbo.CountyStateAgContactInfo.ContactAg
ELSE (
CASE orweb2.dbo.CountyStateAgContactInfo.IsContract
WHEN 1
THEN orweb2.dbo.CountyStateAgContactInfo.ContactCounty
ELSE orweb2.dbo.CountyStateAgContactInfo.ContactState
END
)
END AS [County Contact Name]
INSERT INTO customers (last_name, first_name, city)
SELECT 'Doe', 'John', 'Chicago' FROM dual
WHERE NOT EXISTS
(SELECT '1' from customers
where last_name = 'Doe'
and first_name = 'John'
and city = 'Chicago');
해결책은 '사건' 을 대안으로 기술서임을 제어 방식을 사용할 수 있습니다.
DECLARE @Product TABLE (ID INT, Obsolete VARCHAR(10), InStock VARCHAR(10))
INSERT INTO @Product VALUES
(1,'N','Y'),
(2,'A','B'),
(3,'N','B'),
(4,'A','Y')
SELECT P.* , ISNULL(Stmt.Saleable,0) Saleable
FROM
@Product P
LEFT JOIN
( VALUES
( 'N', 'Y', 1 )
) Stmt (Obsolete, InStock, Saleable)
ON P.InStock = Stmt.InStock OR P.Obsolete = Stmt.Obsolete
결과:.
ID Obsolete InStock Saleable
----------- ---------- ---------- -----------
1 N Y 1
2 A B 0
3 N B 1
4 A Y 1