변경된 데이터 만 기록하고 다른 열은 NULL로 유지하는 응용 프로그램의 로깅 테이블이 있습니다. 내가 지금하고 싶은 것은 해당 열 (Type 및 Status) 중 2 개를 취하는 뷰를 작성하고 해당 로그 행의 항목에 유형 및 상태를 리턴하는 결과 세트를 작성하는 것입니다. 하나 또는 두 개의 컬럼 null도 가능. 이 데이터 예를 들어
2 개의 열의 필드를 결합하여 "매트릭스"를 만드는 방법은 무엇입니까?
: 거기에서
Type Status AddDt
A 1 7/8/2013
NULL 2 7/7/2013
NULL 3 7/6/2013
NULL NULL 7/5/2013
B NULL 7/4/2013
C NULL 7/3/2013
C 4 7/2/2013
produce the resultset:
Type Status AddDt
A 1 7/8/2013
A 2 7/7/2013
A 3 7/6/2013
A 3 7/5/2013
B 3 7/4/2013
C 3 7/3/2013
C 4 7/2/2013
내가 유형 및 상태는 B의 유형으로 특정 조건을 충족 이러한 결과에서 처음으로 알아낼거야 및 상태 3 (2012 년 7 월 4 일)이며 궁극적으로 계산에서 해당 날짜를 사용하므로 실적이 큰 문제입니다. 여기
내가 지금까지 생각하고 있었는지,하지만 내가 할 필요가 어디 나를하지 않습니다 내가 필요한 곳 아래에 제공된 도움으로 그래서SELECT
Type.TypeDesc
, Status.StatusDesc
, *
FROM
jw50_Item c
OUTER APPLY (SELECT TOP 10000 * FROM jw50_ItemLog csh WHERE csh.ItemID = c.ItemID AND csh.StatusCode = 'OPN' ORDER BY csh.AddDt DESC) [Status]
OUTER APPLY (SELECT TOP 10000 * FROM jw50_ItemLog cth WHERE cth.ItemID = c.ItemID AND cth.ItemTypeCode IN ('F','FG','NG','PF','SXA','AB') ORDER BY cth.AddDt DESC) Type
WHERE
c.ItemID = @ItemID
, 내가 얻을 수있었습니다 . 현재의 데이터는 아마도 어떤 필요 조건을 충족하기 때문에
SELECT
OrderID
, CustomerNum
, OrderTitle
, ItemTypeDesc
, ItemTypeCode
, StatusCode
, OrdertatusDesc
FROM
jw50_Order c1
OUTER APPLY (SELECT TOP 1 [DateTime] FROM
(SELECT c.ItemTypeCode, c.OrderStatusCode, c.OrderStatusDt as [DateTime] FROM jw50_Order c WHERE c.OrderID = c1.OrderID
UNION
select (select top 1 c2.ItemTypeCode
from jw50_OrderLog c2
where c2.UpdatedDt >= c.UpdatedDt and c2.ItemTypeCode is not null and c2.OrderID = c.OrderID
order by UpdatedDt DESC
) as type,
(select top 1 c2.StatusCode
from jw50_OrderLog c2
where c2.UpdatedDt >= c.UpdatedDt and c2.StatusCode is not null and c2.OrderID = c.OrderID
order by UpdatedDt DESC
) as status,
UpdatedDt as [DateTime]
from jw50_OrderLog c
where c.OrderID = c1.OrderID AND (c.StatusCode IS NOT NULL OR c.ItemTypeCode IS NOT NULL)
) t
WHERE t.ItemTypeCode IN ('F','FG','NG','PF','SXA','AB') AND t.StatusCode IN ('OPEN')
order by [DateTime]) quart
WHERE quart.DateTime <= @FiscalPeriod2 AND c1.StatusCode = 'OPEN'
Order By c1.OrderID
노조는 결과 집합을 생성하는 로그 테이블 데이터에 추가하여 현재 데이터를 가져올 수 있습니다 : 여기 내 마지막 솔루션입니다. 도움을 주신 분들께 다시 한번 감사드립니다.
문제는 제가 보조 테이블에서 원하는 행이 다른 열에 null 값을 가질 수 있다는 것입니다. Items s에 값이 있지만 Items t가 null이지만 Items s 앞에 입력 된 경우 Items s 행과 Items t 행 사이의 모든 행에 null을 제외하고 아무 것도 없으면 아무 것도없는 날짜가 필요합니다. 해당 행의 t가 null 인 경우에도 Items s 행이 추가되었습니다. "null을 제외하고는 모든 행 사이에 존재합니다"부분은 트릭입니다. 왜 내 질문에 먼저 결과 집합을 생성하고 그 집합에서 날짜를 찾으려고 했는가? –
t1.addDt <= i.addDt 및 t1.Type이 null이 아닌 항목 t1에서 'select max (t1.addDt)'식은 현재 날짜 이전에 값이 마지막으로 설정된 * 날짜 *를 제공합니다. (null 값은 건너 뜁니다). 역순으로 필요할 수도 있습니다 (값을 설정 한 현재 날짜 또는 그 이후의 가장 작은 날짜). – gaborsch