복붙노트

[SQL] 횟수에 따라 ELSE 문은 다른 삽입 문을 실행할 경우 사용

SQL

횟수에 따라 ELSE 문은 다른 삽입 문을 실행할 경우 사용

내가 내 데이터베이스를 검색하고있는 동안 나는 특정 항목이 존재하지 않는 것을 발견하면, 나는 INSERT 문을 실행하고, 좀 더이 항목 중 하나를 찾거나 경우에 나는 다른 INSERT 문을 실행합니다.

나는 완전히 IF ELSE 표현을 사용하는 방법을 모르겠습니다.

내가 지금까지 가지고하는 것은 시간 대상 데이터가 나타납니다의 수를 계산하는 문이다; 이 0보다 큰 경우, 그것은 FALSE를 인쇄 할 수없는 경우는, TRUE 인쇄됩니다. 저는 제가 두 개의 서로 다른 INSERT 문을 실행하려면이 옵션을 사용하는 방법을 이해하는 데 도움이되는 예제를 찾을 수 없습니다.

여기에 지금까지 무엇을 가지고 :

SELECT CASE WHEN COUNT(*)>0 THEN 'TRUE' ELSE 'FALSE' END
(
  SELECT [Some Column], COUNT(*) TotalCount
  FROM INCIDENTS
  WHERE [Some Column] = 'Target Data'
  GROUP BY [Some Column]
)

해결법

  1. ==============================

    1.필요에 따라 여기에 몇 가지 방법은 다음과 같습니다 :

    필요에 따라 여기에 몇 가지 방법은 다음과 같습니다 :

    IF EXISTS (SELECT * FROM TABLE WHERE COLUMN = 'SOME VALUE')
        --INSERT SOMETHING
    ELSE
        --INSERT SOMETHING ELSE
    

    아니면 조금 더

    DECLARE @retVal int
    
    SELECT @retVal = COUNT(*) 
    FROM TABLE
    WHERE COLUMN = 'Some Value'
    
    IF (@retVal > 0)
    BEGIN
        --INSERT SOMETHING
    END
    ELSE
    BEGIN
        --INSERT SOMETHING ELSE
    END 
    
  2. ==============================

    2.사용은 다음과 같이 EXISTS에만큼 당신이 카운트 만 개 이상의 공에 기반을 찾을 필요, 그것은 더 :

    사용은 다음과 같이 EXISTS에만큼 당신이 카운트 만 개 이상의 공에 기반을 찾을 필요, 그것은 더 :

    IF EXISTS (SELECT 1 FROM INCIDENTS  WHERE [Some Column] = 'Target Data')
    BEGIN
        -- TRUE Procedure
    END
    ELSE BEGIN
        -- FALSE Procedure
    END
    
  3. ==============================

    3.IF가 존재

    IF가 존재

    IF exists (select * from table_1 where col1 = 'value')
    BEGIN
        -- one or more
        insert into table_1 (col1) values ('valueB')
    END
    ELSE
        -- zero
        insert into table_1 (col1) values ('value') 
    
  4. ==============================

    4.당신이 무엇을 의미하지 않음 매우 취소

    당신이 무엇을 의미하지 않음 매우 취소

    . 그것은 당신이 후에있는 스위치와 같은 CASE를 사용?

    select case when totalCount >= 0 and totalCount < 11 then '0-10'
                when tatalCount > 10 and totalCount < 101 then '10-100'
                else '>100' end as newColumn
    from (
      SELECT [Some Column], COUNT(*) TotalCount
      FROM INCIDENTS
      WHERE [Some Column] = 'Target Data'
      GROUP BY [Some Column]
    ) A
    
  5. ==============================

    5.간단하게 다음을 사용 :

    간단하게 다음을 사용 :

    IF((SELECT count(*) FROM table)=0)
    BEGIN
    
    ....
    
    END
    
  6. ==============================

    6.하나 확실한 해결책은, 계수 = 1을하고 삽입을 실행하는 모든 항목을 선택 첫째,이 별도의 쿼리를 실행할 수> 1 항목을 선택하고 두 번째 삽입을 실행하는 것입니다.

    하나 확실한 해결책은, 계수 = 1을하고 삽입을 실행하는 모든 항목을 선택 첫째,이 별도의 쿼리를 실행할 수> 1 항목을 선택하고 두 번째 삽입을 실행하는 것입니다.

    두 번째 단계로 두 개의 인서트는 아마 당신은 하나 개의 쿼리로 결합 할 수 있습니다 비슷합니다.

    또 다른 가능성은 레코드를 통해 루프에 커서를 사용하고 각 라인에 필요한 어떤 로직을 수행하는 것입니다.

  7. ==============================

    7.이이 코드를 많은 여러 가지가 있지만 여기에 하나의 가능한 방법입니다. 나는 MS SQL 있으리라 믿고있어

    이이 코드를 많은 여러 가지가 있지만 여기에 하나의 가능한 방법입니다. 나는 MS SQL 있으리라 믿고있어

    우리는 행 수 (또 다른 빠른 예)를 얻어서 시작한 다음 경우 / 다른 할거야

    -- Let's get our row count and assign it to a var that will be used
    --    in our if stmt 
    DECLARE @HasExistingRows int -- I'm assuming it can fit into an int
    SELECT @HasExistingRows = Count(*) 
       ELSE 0 -- false
    FROM
       INCIDENTS
    WHERE {Your Criteria}
    GROUP BY {Required Grouping}
    

    이제 우리는 만일 / 그렇지 논리 MSDN 문서 작업을 수행 할 수 있습니다

    -- IF / Else / Begin / END Syntax
    IF @HasExistingRows = 0 -- No Existing Rows
       BEGIN
          {Insert Logic for No Existing Rows}
       END
    ELSE -- existing rows are found
       BEGIN
          {Insert logic for existing rows}
       END
    

    (마흐무드 가말의 의견에 의해 영감을) 또 다른 빠른 방법 :

    "EXISTS"찾아 - - MSDN 문서 2 전체 변수 생성 / 할당을 잊어 버려.

    IF EXISTS ({SELECT Query})
       BEGIN
          {INSERT Version 1}
       END
    ELSE
       BEGIN
          {INSERT version 2}
       END
    
  8. ==============================

    8.이 SQL 서버에있는 경우, 귀하의 구문이 올바른지; 그러나, 당신은 당신의 중첩 된 쿼리의 총 개수로 COUNT (*)를 참조 할 필요가있다. 이것은 당신이 필요로하는 무엇을 제공해야합니다 :

    이 SQL 서버에있는 경우, 귀하의 구문이 올바른지; 그러나, 당신은 당신의 중첩 된 쿼리의 총 개수로 COUNT (*)를 참조 할 필요가있다. 이것은 당신이 필요로하는 무엇을 제공해야합니다 :

    SELECT CASE WHEN TotalCount >0 THEN 'TRUE' ELSE 'FALSE' END FROM
    (
      SELECT [Some Column], COUNT(*) TotalCount
      FROM INCIDENTS
      WHERE [Some Column] = 'Target Data'
      GROUP BY [Some Column]
    ) DerivedTable
    

    이 사용하면 변수에 TOTALCOUNT를 할당하고 ELSE 문이 INSERT 문을 실행하는 경우 다음을 사용할 수 있습니다 :

    DECLARE @TotalCount int
    SELECT @TotalCount = TotalCount FROM
    (
      SELECT [Some Column], COUNT(*) TotalCount
      FROM INCIDENTS
      WHERE [Some Column] = 'Target Data'
      GROUP BY [Some Column]
    ) DerivedTable
    IF @TotalCount > 0
        -- INSERT STATEMENT 1 GOES HERE
    ELSE
        -- INSERT STATEMENT 2 GOES HERE
    
  9. from https://stackoverflow.com/questions/14072140/using-if-else-statement-based-on-count-to-execute-different-insert-statements by cc-by-sa and MIT license