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] 삭제
몇 마디 만하겠습니다