Sql SELECT 작업공간에서 이프스탕 리셋합니다 어떻게 합니까?

'한' 에서 '어떻게 수행합니까 이프스탕 SQL SELECT' 기술서임을?

예를 들면 다음과 같습니다.

SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
질문에 대한 의견 (3)
해결책

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

해설 (12)

네 친구가 이 상황, 많은 경우 문이 두 가지 양식:

단순 사례:

SELECT CASE  WHEN       THEN 
                       WHEN  THEN 
                                         ELSE 
       END AS 
FROM <table>

확장 사례:

SELECT CASE WHEN       THEN 
            WHEN  THEN 
                             ELSE 
       END AS 
FROM <table>

Order by 절을 돌림무늬 오더할 상행담관염이라고 대한 작업공간에서 제표를 로켈이 동일팔레트에 수도 있습니다.

해설 (5)

Sql Server 2012년 에서 사용할 수 있습니다. [ '' 세프 함수] [1] 엔드입니다.

SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM   Product

이는 단순한 속기 (비록 필터링되지 표준 SQL) 방법을 효과적으로 먹어서나 '케이스'.

내가 선호하는 간결 비교했을 때 확장됨 '케이스' 버전.

세프 () '와' 케이스 '로 모두' 해결하십시오 표현식에서는 SQL 문 내에서 사용되는 이벤트여야만 잘 수 있다.

&gt. 이 CASE 표현식에는 실행 흐름을 제어하는 데 사용할 수 없습니다. &gt. Transact-SQL 명령문입니다, 기술서임을 블록, 사용자 지정 함수 및 &gt. 저장 프로시저.

필요에 의해 달성됨 이러한 한계를 극복할 수 없는 경우 (예를 들어, 그 결과 몇 가지 조건을 종속적임 복귀하십시오 모양의 설정합니까 다르게 하는) 그런 다음 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)

해설 (1)

일부 찾을 수 있는 좋은 예에 The Power of SQL 경우 명령문입니다 및 기술서임을 사용할 수 있는 이 같은 일이 될 것 같아요 () 의 4guysfromrolla).

SELECT
    FirstName, LastName,
    Salary, DOB,
    CASE Gender
        WHEN 'M' THEN 'Male'
        WHEN 'F' THEN 'Female'
    END
FROM Employees
해설 (2)

览侩 荤례. 이 같은 일이.

SELECT Salable =
        CASE Obsolete
        WHEN 'N' THEN 1
        ELSE 0
    END
해설 (0)
SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
                                            ELSE 'NO' 
 END) as Salable
, * 
FROM Product
해설 (0)
 SELECT
   CASE 
      WHEN OBSOLETE = 'N' or InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   * 
FROM PRODUCT
해설 (0)

Microsoft SQL Server (T-SQL)

'선택' 에서 사용합니다.

select case when Obsolete = 'N' or InStock = 'Y' then 'YES' else 'NO' end

여기서 '조' 에서 사용합니다.

where 1 = case when Obsolete = 'N' or InStock = 'Y' then 1 else 0 end
해설 (1)

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' 

39, t 이 할 수 있는 좋은 isn& T-SQL?

해설 (2)

간단한 다른 경우 문을 빨리 sql&; 서버:

DECLARE @val INT;
SET @val = 15;

IF @val < 25
PRINT 'Hi Ravi Anand';
ELSE
PRINT 'By Ravi Anand.';

GO

Server 문에 네스트된 이프리얼스 SQL&amp 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
해설 (1)

사용할 경우 기술서임을:

SELECT CASE
       WHEN (Obsolete = 'N' OR InStock = 'Y')
       THEN 'Y'
       ELSE 'N'
END as Available

etc...
해설 (0)

순결케 비트를 사용하여 논리를 폈다.

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&amp 없이 사용할 수 있을 만큼, 서버] [1].

시작, "진짜 '가치' 와 '거짓' 에 대해 작업해야 하는 아웃해야 선택한 로드하십시오. 여기에 두 가지 누이프] [3]:

for true: ISNULL(NULLIF(p.[Instock], 'Y'), 1)
for false: ISNULL(NULLIF(p.[Instock], 'N'), 0)

보기입니다 결합되어 1 또는 0. 비트단위 운영자 다음 사용합니다.

39 의 it& 가장 위지윅 (wysiwyg) 메서드입니다.

[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?

해설 (6)

새로운 기능으로, 세프 (사용하여 간단히 할수 있는), SQL Server 2012년 에 추가되었다.

SELECT IIF ( (Obsolete = 'N' OR InStock = 'Y'), 1, 0) AS Saleable, * FROM Product
해설 (3)
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' )
해설 (0)
SELECT CASE WHEN profile.nrefillno = 0 THEN 'N' ELSE 'R'END as newref
From profile
해설 (1)
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
해설 (3)

39 이 isn& 답을 한 사례로 기술서임을 사용, t, 그냥 내가 일하는 곳. 이 회사는 네스트된 사례를 발표했다. 이제 내 눈을 초과 이유를 알 수 있다.

 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]
해설 (3)

39 표, re 결과 등을 삽입할 경우 you& 처음으로 한 표를 얻은 결과를 아닌 다른 방식으로 전송하는 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');
해설 (1)

해결책은 '사건' 을 대안으로 기술서임을 제어 방식을 사용할 수 있습니다.

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
해설 (3)
SELECT CASE WHEN Obsolete = 'N' or InStock = 'Y' THEN 1 ELSE 0 
             END AS Saleable, * 
FROM Product
해설 (0)