SQL Server에서 저장 프로 시저를 사용하여 중복 값을 열의 고유 한 값으로 변경하는 방법

세미 곡 세오 글루

OccupationalInjuryId의 중복 값이있는 경우 RowSpan 값을 변경해야합니다. 다음은 스크린 샷입니다.

여기에 이미지 설명 입력

T-SQL 또는 #temporary테이블 구조를 사용해야합니까? 그러나 나는 고치는 방법을 알 수 없었다. 예를 들어 두 개의 값이 OccupationalId = 1100있고 두 rowspan은 2입니다. 두 번째 값의 RowSpan 번호는 1이어야합니다.

내 SQL 쿼리 :

select *
from    
    (select 
        Row_Number() over (order by oi.Id) as RowNo,
        oid.OccupationalInjuryId
     from 
        OTH_OccupationalInjury oi
     left join 
        OTH_OccupationalInjuryDetail oid on oi.Id = oid.OccupationalInjuryId
     where 
        1 = 1) t1
left join
    (select
        count(OccupationalInjuryId) end as RowSpan,
        oid.OccupationalInjuryId
     from 
        OTH_OccupationalInjury oi
    left join 
        OTH_OccupationalInjuryDetail oid on oi.Id = oid.OccupationalInjuryId
    where 
        1=1
    group by 
        OccupationalInjuryId
    having
        (Count(OccupationalInjuryId) > 1) ) t2 on t1.OccupationalInjuryId = t2.OccupationalInjuryId
END
카드

내가 올바르게 받았다면 각 OccupationalInjuryId 및 원하는 다른 사람에 대한 첫 번째 RowSpan 값에만 관심이 있습니다. 1. 내가 틀렸다면 나를 수정하십시오.

따라서 다음과 같은 것을 시도해 볼 수 있습니까?

DECLARE @BaseTable TABLE(ID INT, OccupationalInjuryId INT, RowSpan INT)
INSERT INTO @BaseTable (ID, OccupationalInjuryId, RowSpan)
SELECT 1, 1100, 2 UNION ALL
SELECT 2, 1100, 2 UNION ALL
SELECT 3, 1099, 2 UNION ALL
SELECT 4, 1099, 3 UNION ALL
SELECT 5, 1106, NULL

SELECT 
  ID, 
  OccupationalInjuryId, 
  CASE WHEN rn = 1 THEN RowSpan ELSE 1 END AS RowSpan 
FROM
(
  SELECT ID, OccupationalInjuryId, RowSpan, ROW_NUMBER() OVER (PARTITION BY OccupationalInjuryId, RowSpan ORDER BY ID) AS rn FROM @BaseTable
) tmp

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관