programing

Count를 기반으로 한 IF ELSE 문을 사용하여 다른 Insert 문 실행

goodcopy 2021. 1. 18. 22:05
반응형

Count를 기반으로 한 IF ELSE 문을 사용하여 다른 Insert 문 실행


데이터베이스를 검색하는 동안 특정 항목이 존재하지 않는 경우 INSERT 문을 실행하고이 항목 중 하나 이상을 찾으면 다른 INSERT 문을 실행합니다.

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

지금까지 내가 가지고있는 것은 대상 데이터가 나타나는 횟수를 세는 진술입니다. 0보다 크면 TRUE를 인쇄하고 그렇지 않으면 FALSE를 인쇄합니다. 이것을 사용하여 두 개의 다른 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]
)

필요에 따라 다음과 같은 두 가지 방법이 있습니다.

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 

Count를 기반으로 0보다 더 많이 찾을 필요가 있다면 다음과 같이 EXISTS를 사용하는 것이 좋습니다.

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

존재한다면

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') 

당신이 의미하는 바가 명확하지 않습니다.

"I cant find any examples to help me understand how I can use this to run 2 different statements:"

. 당신이 추구하는 것처럼 사용 CASE하고 SWITCH있습니까?

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

한 가지 확실한 해결책은 두 개의 개별 쿼리를 실행하고 먼저 count = 1 인 모든 항목을 선택하고 삽입을 실행 한 다음 count> 1 인 항목을 선택하고 두 번째 삽입을 실행하는 것입니다.

두 번째 단계로 두 삽입이 유사한 경우 하나의 쿼리로 결합 할 수 있습니다.

또 다른 가능성은 커서를 사용하여 레코드 집합을 반복하고 각 줄에 필요한 논리를 수행하는 것입니다.


이것을 코딩하는 방법은 아주 많지만 여기에 가능한 한 가지 방법이 있습니다. MS SQL을 가정하고 있습니다.

행 개수 (Another Quick Example ) 를 가져 오는 것으로 시작한 다음 if / else를 수행합니다.

-- 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}

이제 우리는 If / Else Logic MSDN Docs를 수행 할 수 있습니다.

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

또 다른 빠른 방법 (Mahmoud Gamal의 의견에서 영감을 얻음) :

Forget the whole variable creation / assignment - look up "EXISTS" - MSDN Docs 2.

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

Simply use the following:

IF((SELECT count(*) FROM table)=0) BEGIN

....

END


If this is in SQL Server, your syntax is correct; however, you need to reference the COUNT(*) as the Total Count from your nested query. This should give you what you need:

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

Using this, you could assign TotalCount to a variable and then use an IF ELSE statement to execute your INSERT statements:

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

ReferenceURL : https://stackoverflow.com/questions/14072140/using-if-else-statement-based-on-count-to-execute-different-insert-statements

반응형