IF를 실행하려면 어떻게 해야 하나요?그리고 SQL SELECT에?
어떻게 해야 하나요?IF...THEN에 있어서SQL SELECT스테이트먼트?
예를 들어 다음과 같습니다.
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
그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 Server Denali(SQL Server 2012)에서는 IIF 문이 추가되어 액세스에서도 사용할 수 있습니다(Martin Smith가 지적).
SELECT IIF(Obsolete = 'N' or InStock = 'Y', 1, 0) as Saleable, * FROM Product
케이스 스테이트먼트는 이 상황에서 당신의 친구이며 다음 두 가지 형식 중 하나를 취합니다.
간단한 경우:
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>
케이스스테이트먼트를절별로순서화하여정말멋있게주문할수도있습니다.
SQL Server 2012부터는 이 기능을 사용할 수 있습니다.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
이는 사실상 (표준 SQL은 아니지만) 간략한 기술일 뿐입니다.CASE.
나는 확대된 것에 비해 간결함을 선호한다.CASE버전입니다.
둘다요.IIF()그리고.CASESQL 문 내에서 표현식으로 해결되며 잘 정의된 장소에서만 사용할 수 있습니다.
CASE 식을 사용하여 Transact-SQL 문, 문 블록, 사용자 정의 함수 및 저장 프로시저의 실행 흐름을 제어할 수 없습니다.
이러한 제한(예를 들어 조건에 따라 다른 형태의 결과 세트를 반환해야 하는 경우 등)으로 요구를 충족할 수 없는 경우 SQL Server에는 procedure 키워드도 있습니다.
IF @IncludeExtendedInformation = 1
BEGIN
SELECT A,B,C,X,Y,Z
FROM T
END
ELSE
BEGIN
SELECT A,B,C
FROM T
END
단, 이 접근방식에서는 파라미터 스니핑 문제를 피하기 위해 주의가 필요한 경우가 있습니다.
"The Power of SQL CASE Statements"에서 몇 가지 좋은 예를 찾을 수 있습니다.사용할 수 있는 문장은 다음과 같습니다(4guysfromrola에서).
SELECT
FirstName, LastName,
Salary, DOB,
CASE Gender
WHEN 'M' THEN 'Male'
WHEN 'F' THEN 'Female'
END
FROM Employees
사용 예이런 거.
SELECT Salable =
CASE Obsolete
WHEN 'N' THEN 1
ELSE 0
END
SELECT
(CASE
WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
ELSE 'NO'
END) as Salable
, *
FROM Product
Microsoft SQL Server (T-SQL)
에select, 사용방법:
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
이 링크에서 우리는 이해할 수 있다.IF THEN ELSET-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'
이 정도면 T-SQL에 충분하지 않나요?
SELECT
CASE
WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE'
ELSE 'FALSE'
END AS Salable,
*
FROM PRODUCT
SQL Server의 간단한 if-else 문:
DECLARE @val INT;
SET @val = 15;
IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';
GO
SQL Server에 중첩된 If...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
CASE 스테이트먼트를 사용합니다.
SELECT CASE
WHEN (Obsolete = 'N' OR InStock = 'Y')
THEN 'Y'
ELSE 'N'
END as Available
etc...
SQL Server 2012에는 새로운 기능인 IIF(간단히 사용할 수 있음)가 추가되었습니다.
SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
순수 비트 논리 사용:
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에 없는 경우 작업 데모를 참조하십시오.
, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ)의 값을 구해야 합니다.true ★★★★★★★★★★★★★★★★★」false를 선택합니다.다음으로 2개의 NULLIF를 나타냅니다.
for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)
합치면 1 또는 0이 됩니다.다음으로 비트 연산자를 사용합니다.
WYSIWYG의 가장 큰 방식입니다.
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' )
SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref
From profile
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
이것은 답변이 아닙니다.제가 일하는 곳에서 사용되고 있는 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]
한 테이블에서 다른 테이블로 결과를 전송하지 않고 처음 테이블에 결과를 삽입하는 경우 Oracle 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');
★★★★★★★의 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
SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0
END AS Saleable, *
FROM Product
이것을 실제로 실장하기 위해서는, 다음의 2개의 선택지가 있습니다.
SQL Server 2012에서 도입된 IIF 사용:
SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product「」를 사용합니다.
Select Case:SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 END as Saleable, * FROM Product
SQL CASE를 사용하는 것은 일반적인 If / Else 문과 동일합니다.아래 쿼리에서 사용되지 않는 값 = 'N' 또는 InStock 값 = 'Y'인 경우 출력은 1이 됩니다.그렇지 않으면 출력은 0이 됩니다.그런 다음 Salable Column 아래에 0 또는 1의 값을 입력합니다.
SELECT
CASE
WHEN obsolete = 'N' OR InStock = 'Y'
THEN 1
ELSE 0
END AS Salable
, *
FROM PRODUCT
질문:.
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이 경우 -- 문제를 방지하는 데 도움이 됩니다.
SELECT
if((obsolete = 'N' OR instock = 'Y'), 1, 0) AS saleable, *
FROM
product;
SQL Server 2012를 사용하는 사용자에게 IIF는 케이스 스테이트먼트 대신 추가된 기능입니다.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
다음과 같습니다.
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;
CASE 문의 사용은 좋지만 SQL Select에 IF 문을 입력하라는 질문이 있었습니다.지금까지 사용한 것은 다음과 같습니다.
SELECT
if(GENDER = "M","Male","Female") as Gender
FROM ...
이는 Excel 또는 시트 IF 문과 같습니다.조건이 있고, 그 다음에 참 조건과 거짓 조건이 이어집니다.
if(condition, true, false)
또, if 문을 네스트 할 수도 있습니다(단, 를 사용하면 CASE :- 를 사용할 필요가 있습니다).
(주의: MySQL Workbench에서는 동작하지만 다른 플랫폼에서는 동작하지 않을 수 있습니다.)
완전성을 위해 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 |
예를 들어, 제품이 구식이지만 재고가 있는지 없는지는 알 수 없지만, 제품이 판매 가능한지 여부는 알 수 없습니다.이 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의 동작을 결정하여 3개의 결과를 2개의 결과로 변환할 수 있습니다.예: null은 판매 불가로 취급됩니다.
SELECT CASE
WHEN obsolete = 'N' OR instock = 'Y' THEN 'true'
ELSE 'false' -- either false or null
END AS saleable
여러 가지 조건이 있습니다.
SELECT
(CASE
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1001' THEN 'DM'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1002' THEN 'GS'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1003' THEN 'MB'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1004' THEN 'MP'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1005' THEN 'PL'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1008' THEN 'DM-27'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1011' THEN 'PB'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1012' THEN 'UT-2'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1013' THEN 'JGC'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1014' THEN 'SB'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1015' THEN 'IR'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1016' THEN 'UT-3'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1017' THEN 'UT-4'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1019' THEN 'KR'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1020' THEN 'SYB-SB'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1021' THEN 'GR'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1022' THEN 'SYB-KP'
WHEN RIGHT((LEFT(POSID,5)),4) LIKE '1026' THEN 'BNS'
ELSE ''
END) AS OUTLET
FROM matrixcrm.Transact
언급URL : https://stackoverflow.com/questions/63447/how-do-i-perform-an-if-then-in-an-sql-select
'programing' 카테고리의 다른 글
| 저장되지 않은 SQL 쿼리 스크립트 복구 (0) | 2023.04.06 |
|---|---|
| T-SQL 분할 문자열 (0) | 2023.04.06 |
| 저장 프로시저의 결과 집합에서 열 선택 (0) | 2023.04.06 |
| 2017년 이전에 SQL Server에서 문자열을 트리밍하려면 어떻게 해야 합니까? (0) | 2023.04.06 |
| SQL Server 테이블에 열이 있는지 확인하는 방법 (0) | 2023.04.06 |