[SQL] 어떻게 SQL SELECT에서 THEN ...는 IF를 수행합니까?
SQL어떻게 SQL SELECT에서 THEN ...는 IF를 수행합니까?
어떻게 SQL SELECT 문에서 THEN ...는 IF를 수행합니까?
예를 들면 :
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
해결법
-
==============================
1.case 문은 SQL의 IF에 가장 가까운과 SQL Server의 모든 버전에서 지원됩니다.
case 문은 SQL의 IF에 가장 가까운과 SQL Server의 모든 버전에서 지원됩니다.
SELECT CAST( CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END AS bit) as Saleable, * FROM Product
당신은 당신이 부울 값으로 결과를 원하는 경우 CAST를 할 필요가있다. 당신이 int로 만족하면,이 작품 :
SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END as Saleable, * FROM Product
CASE 문은 다른 CASE 문에 포함하고도 집계에 포함 할 수 있습니다.
SQL 서버 데날리 (2012 SQL 서버)도 액세스 (마틴 스미스에 의해 지적)에서 사용할 수있는 IIF 문을 추가합니다 :
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
-
==============================
2.케이스 문은이 상황에서 당신의 친구, 그리고 두 가지 형태 중 하나를 취합니다
케이스 문은이 상황에서 당신의 친구, 그리고 두 가지 형태 중 하나를 취합니다
간단한 경우 :
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 절에 case 문을 넣을 수 있습니다.
-
==============================
3.SQL 서버 2012에서 당신은이에 대한 IIF 기능을 사용할 수 있습니다.
SQL 서버 2012에서 당신은이에 대한 IIF 기능을 사용할 수 있습니다.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, * FROM Product
이것은 효과적으로 (하지 표준 SQL 불구하고) 그냥 속기 CASE를 작성하는 방법입니다.
확장 된 CASE 버전과 비교했을 때 나는 간결함을 선호합니다.
그리고 SQL 문 내에서 식으로 두 IIF () 및 CASE의 해결은 잘 정의 된 장소에서 사용할 수 있습니다.
사용자의 요구가 이러한 제한에 의해 만족 될 수없는 경우 SQL Server는 키워드 IF 절차가 않습니다 (예를 들어, 필요 어떤 조건에 따라 다른 모양의 결과 집합을 반환합니다).
IF @IncludeExtendedInformation = 1 BEGIN SELECT A,B,C,X,Y,Z FROM T END ELSE BEGIN SELECT A,B,C FROM T END
케어는 때때로 그러나이 방법으로 문제를 스니핑 매개 변수 않도록주의해야합니다.
-
==============================
4.당신은 SQL CASE 문의 힘에 몇 가지 좋은 예를 찾을 수 있습니다, 그리고 당신이 (4guysfromrolla에서) 이런 식으로 뭔가를 할 것이다 사용할 수있는 문을 생각한다 :
당신은 SQL CASE 문의 힘에 몇 가지 좋은 예를 찾을 수 있습니다, 그리고 당신이 (4guysfromrolla에서) 이런 식으로 뭔가를 할 것이다 사용할 수있는 문을 생각한다 :
SELECT FirstName, LastName, Salary, DOB, CASE Gender WHEN 'M' THEN 'Male' WHEN 'F' THEN 'Female' END FROM Employees
-
==============================
5.사용 사례. 이 같은.
사용 사례. 이 같은.
SELECT Salable = CASE Obsolete WHEN 'N' THEN 1 ELSE 0 END
-
==============================
6.
SELECT (CASE WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES' ELSE 'NO' END) as Salable , * FROM Product
-
==============================
7.마이크로 소프트 SQL 서버 (T-SQL)
마이크로 소프트 SQL 서버 (T-SQL)
선별, 사용 :
select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end
where 절에서 사용 :
where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end
-
==============================
8.
SELECT CASE WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' ELSE 'FALSE' END AS Salable, * FROM PRODUCT
-
==============================
9.이 링크에서, 우리는 T-SQL에서 THEN ELSE IF를 이해할 수있다 :
이 링크에서, 우리는 T-SQL에서 THEN ELSE IF를 이해할 수있다 :
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'
되지는 T-SQL이 좋은의 충분한가요?
-
==============================
10.SQL Server의 간단한 경우-else 문 :
SQL Server의 간단한 경우-else 문 :
DECLARE @val INT; SET @val = 15; IF @val < 25 PRINT 'Hi Ravi Anand'; ELSE PRINT 'By Ravi Anand.'; GO
중첩하면 ... SQL Server의 else 문 -
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
-
==============================
11.case 문을 사용합니다 :
case 문을 사용합니다 :
SELECT CASE WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'Y' ELSE 'N' END as Available etc...
-
==============================
12.새로운 기능, IIF는 (우리가 간단하게 사용할 수있는) 2012 SQL 서버에서 추가되었다 :
새로운 기능, IIF는 (우리가 간단하게 사용할 수있는) 2012 SQL 서버에서 추가되었다 :
SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
-
==============================
13.순수 비트 로직을 사용하여
순수 비트 로직을 사용하여
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
작업 데모를 참조하십시오 경우 SQL Server의 경우없이.
시작를 들어, 선택된 조건 실제의 값과 거짓을 해결해야합니다. 여기에 두 NULLIF 온다 :
for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1) for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)
함께 결합하여 1 또는 0 다음 사용 비트 연산자를 제공한다.
그것은 가장 WYSIWYG 방식입니다.
-
==============================
14.
SELECT 1 AS Saleable, * FROM @Product WHERE ( Obsolete = 'N' OR InStock = 'Y' ) UNION SELECT 0 AS Saleable, * FROM @Product WHERE NOT ( Obsolete = 'N' OR InStock = 'Y' )
-
==============================
15.
SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref From profile
-
==============================
16.
case statement some what similar to if in SQL server SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END as Saleable, * FROM Product
-
==============================
17.이 답변, 내가 작업 사용에 CASE 문 단지 예 아니다. 그것은 중첩 된 CASE 문이있다. 지금 당신은 내 눈이 교차하는 이유를 알고있다.
이 답변, 내가 작업 사용에 CASE 문 단지 예 아니다. 그것은 중첩 된 CASE 문이있다. 지금 당신은 내 눈이 교차하는 이유를 알고있다.
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]
-
==============================
18.당신은 오히려 다른 하나 개의 테이블에서 오라클 11.2g에서이 작품을 결과를 전송하는 것보다, 처음으로 테이블에 결과를 삽입하는 경우 :
당신은 오히려 다른 하나 개의 테이블에서 오라클 11.2g에서이 작품을 결과를 전송하는 것보다, 처음으로 테이블에 결과를 삽입하는 경우 :
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');
-
==============================
19.case 문에 대한 대안 솔루션으로서, 테이블 중심의 접근 방식은 사용할 수 있습니다 :
case 문에 대한 대안 솔루션으로서, 테이블 중심의 접근 방식은 사용할 수 있습니다 :
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
-
==============================
20.
SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END AS Saleable, * FROM Product
-
==============================
21.SQL 서버 2012을 사용하는 사람들을 위해, IIF 추가 및 사례 문에 대한 대안으로 작동 된 기능입니다.
SQL 서버 2012을 사용하는 사람들을 위해, IIF 추가 및 사례 문에 대한 대안으로 작동 된 기능입니다.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, * FROM Product
-
==============================
22.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y',1,0) AS Saleable, * FROM Product
-
==============================
23.질문:
질문:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
ANSI :
Select case when p.Obsolete = 'N' or p.InStock = 'Y' then 1 else 0 end as Saleable, p.* FROM Product p;
별칭을 사용하여 - P는이 경우에하는 - 문제를 방지하는 데 도움이됩니다.
-
==============================
24.당신은 실제로 구현이 두 가지 선택을 할 수 있습니다 :
당신은 실제로 구현이 두 가지 선택을 할 수 있습니다 :
-
==============================
25.
SELECT CAST( CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN ELSE 0 END AS bit ) as Saleable, * FROM Product
-
==============================
26.그것은 그런 일이 될 것입니다 :
그것은 그런 일이 될 것입니다 :
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails;
-
==============================
27.SQL CASE를 사용하는 것은 단지 보통의 경우, / else 문 같다. 쿼리 아래에서 사용되지 않는 값 = 'N'또는 경우의 inStock 값 경우 = 'Y'나서 출력 1. 그렇지 않으면 0을 출력 할 것이다 것이다. 그런 다음 우리는 판매 가능한 열에서이 0 또는 1의 값을 넣어.
SQL CASE를 사용하는 것은 단지 보통의 경우, / else 문 같다. 쿼리 아래에서 사용되지 않는 값 = 'N'또는 경우의 inStock 값 경우 = 'Y'나서 출력 1. 그렇지 않으면 0을 출력 할 것이다 것이다. 그런 다음 우리는 판매 가능한 열에서이 0 또는 1의 값을 넣어.
SELECT CASE WHEN obsolete = 'N' OR InStock = 'Y' THEN 1 ELSE 0 END AS Salable , * FROM PRODUCT
-
==============================
28.완전성을 위해, 나는 SQL이 3 치 논리를 사용하는 추가합니다. 표현식:
완전성을 위해, 나는 SQL이 3 치 논리를 사용하는 추가합니다. 표현식:
obsolete = 'N' OR instock = 'Y'
세 가지 결과를 생산할 수 :
| obsolete | instock | saleable | |----------|---------|----------| | Y | Y | true | | Y | N | false | | Y | null | null | | N | Y | true | | N | N | true | | N | null | true | | null | Y | true | | null | N | null | | null | null | null |
그래서 예를 들어 제품은 사용되지 않지만 제품은 제품이 팔리는 경우 다음 몰라요 때문에 inStock 경우 당신은 몰라요합니다. 다음과 같이이 3 치 논리를 작성할 수 있습니다 :
SELECT CASE WHEN obsolete = 'N' OR instock = 'Y' THEN 'true' WHEN NOT (obsolete = 'N' OR instock = 'Y') THEN 'false' ELSE NULL END AS saleable
그것이 어떻게 작동하는지 당신이 파악되면, 당신은 널 (null)의 동작을 결정하여 두 결과 세 가지 결과를 변환 할 수 있습니다. 예를 들면 이 팔리는하지으로 널 (null)을 치료하는 것입니다 :
SELECT CASE WHEN obsolete = 'N' OR instock = 'Y' THEN 'true' ELSE 'false' -- either false or null END AS saleable
from https://stackoverflow.com/questions/63447/how-do-i-perform-an-if-then-in-an-sql-select by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL Server에서 INSERT 또는 UPDATE를위한 솔루션 (0) | 2020.03.08 |
---|---|
[SQL] 어떻게 SQL 주입에 대한 매개 변수화 된 쿼리 도움을? (0) | 2020.03.07 |
[SQL] SQL, 숫자의 보조 테이블 (0) | 2020.03.07 |
[SQL] 는 SQL 서버에서 어떻게 물건과 'XML 경로에 대한'작업 (0) | 2020.03.07 |
[SQL] 요소 번호의 PostgreSQL unnest () (0) | 2020.03.07 |