programing

Count에 기반한 IFELL 문을 사용하여 다른 Insert 문

iphone6s 2023. 7. 6. 21:58
반응형

Count에 기반한 IFELL 문을 사용하여 다른 Insert 문

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

IFELE 표현을 어떻게 사용해야 할지 잘 모르겠습니다.

지금까지 제가 가진 것은 대상 데이터가 나타나는 횟수를 세는 문장입니다. 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 

다음을 사용하면 됩니다.

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

....

END

0을 초과하는 개수를 기준으로 검색해야 하는 경우 다음과 같이 사용하는 것이 좋습니다.

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이

먼저 행 수를 확인한 다음(다른 빠른 예) 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/Ell Logic 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

또 다른 더 빠른 방법(마흐무드 가말의 발언에서 영감을 얻음):

전체 변수 생성/할당을 잊어버림 - "EXIST" 찾기 - MSDN Docs 2.

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

SQL Server에 있는 경우 구문이 올바르지만 COUNT(*)를 중첩된 쿼리의 Total 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를 변수에 할당한 다음 IFELF 문을 사용하여 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

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

반응형