2012-07-17 1 views
1

데이터베이스의 보고서 /보기로 저장된 재고 원장을 사용하고 있습니다. 수출하면 다음과 같습니다누적 합계를 기반으로 반환 된 값 계산을위한 액세스 또는 T-SQL 쿼리

Tran Type   Txn Date  Item  Quantity 
Opening Balance 6/30/12  Item1  4 
Opening Balance 6/30/12  Item2  7 
Shipping   7/14/12  Item2 -1 
Opening Balance 6/30/12  Item3  3 
Shipping   7/2/12  Item3 -1 
Opening Balance 6/30/12  Item4  5 
Shipping   7/3/12  Item4 -1 
Shipping   7/3/12  Item4 -1 
Shipping   7/3/12  Item4 -1 
Shipping   7/5/12  Item4 -1 
Shipping   7/5/12  Item4 -1 
Receiving   7/9/12  Item4 10 

내보내기 전에, 수출 기간에 따라 발생하는 "열기 밸런스"항목을 포함하지 않습니다.

우리는 주어진 기간 내에 각 품목이 재고가없는 날을 추적하려고 노력하고 있습니다. 이 단계의 첫 번째 단계는 Excel에서 피벗 테이블을 통해 이전에 수행했던 항목별로 누적 합계를 만드는 것입니다. 거기에서 각 항목이 0, 1, 2, 3 또는 4 일 기준으로 유연하게 동적으로 유지되어야합니다. 처음에는 피벗 테이블을 통해이 수를 고려하기를 원 했었습니다. 그리고 저는 turned to superuser's help for that. 불행히도 Excel을 통해 이러한 유형의 작업을 수행하는 것은 반 직관적 일 수 있으므로 여기에서 문제를 제기하고 있습니다.

저는 Access와 SQL Server에 초보자 경험이 있습니다. 오라클과 PL/SQL에서 공식적인 훈련을 받았지만 수년 전이었습니다. 아마도이 문제에 또 다른 복잡성을 추가 할 수 있습니다. 시스템 백엔드에 아무 것도 쓰거나 영구 저장할 수 없습니다 (권한이 있음에도 불구하고).

지금까지, 나는 단지 항목에 의해 실행 합계를 만들기 위해 T-SQL 문을 알아 냈어요 :

Select 
TxnDate, 
    Quantity, 
     Item, 
    (SELECT Sum(Quantity) 
    FROM DATABASE.dbo.InventoryLedger as D1 
    WHERE D1.TxnDate <= D0.TxnDate AND D1.Item = D0.Item) as balance 
    FROM DATABASE.dbo.InventoryLedger as D0 
    where Item = 'Item4' and TxnDate >= 2012-07-01 

나는이 후 잃었어요. 나는 어떤 종류의 계산을해야하는지, 아니면 0 qty를 치는 항목과 나중에 다시 수신되는 항목 사이의 날짜를 뺄 수있는 방법을 찾지 못합니다. 이미 계산 된 잔액 열을 기반으로 다른 집계 또는 계산 된 열을 추가하는 방법을 잘 모르겠습니다.이 쿼리를 변환하는 방법도 모르므로 동일한 데이터의 액세스 파일과 함께 작동합니다. Access 또는 T-SQL 형식의 솔루션을 허용합니다. Access에서 카운트를 수행 할 수있게됨에 따라 데이터베이스를 연결하고 직접 보고서를보다 쉽게 ​​만들 수 있도록하는 동안 T-SQL을 실제로 배우기를 열망합니다.

매일 모든 항목의 재고 수준을 쉽게 쿼리 할 수 ​​있는지 궁금합니다. 나는 이것이 똑같은 정확한 데이터를 사용하여 계산 될 것이라고 생각하기 때문에 시간과 공간의 낭비 일뿐입니다. 맞습니까?

모든 도움을 주시면 감사하겠습니다. 저는 몇 달 동안 재고 부족을 측정 할 수있는 해결책을 제시하려고 노력해 왔습니다. 그리고 이것은 제가 지금까지 가장 가깝습니다. 감사.

+0

것은 당신이 SQL 서버 2012를 사용하고 그런 다음

, 또한 다음 레코드의 최소 날짜를 얻을하여 다음 비제로 정액을 받고, 그룹을 사용하려면이에 가입 자체를 할 혹시? –

+0

2008R2, Express. – Matt

+0

관심있는 매일 데이터베이스에 행이 하나 이상 있습니까? –

답변

1

오른쪽 창/분석 함수 세트를 사용하면 훨씬 쉽습니다. 그러나 나는 아이디어가 있습니다.

먼저 자체 조인을 사용하여 누적 합계를 얻을 수 있습니다.

with tcum as (
    select t.txnDate, t.Item, t.quantity, sum(tprev.quantity) as cumq 
    from t left outer join 
      t tprev 
      on t.item = tprev.item and 
      t.txnDate >= tprev.txnDate 
    group by t.txnDate, t.Item, t.quantity 
    ) 
select tcum.item, tcum.txndate, MIN(tcumnext.txndate) as nextfilldate 
from tcum left outer join 
     tcum tcumnext 
     on tcum.item = tcumnext.item and 
     tcum.date < tcumnext.date and 
     tcumnext.cumq > 0 and 
     tcum.cumq = 0 
group by tcum.item, tcum.txndate 
+0

빠른 테스트를 위해 단일 항목으로 확인하려면 어떤 표를 가져와야합니까? 또한, "Where Item ="Item4 ""는 그룹 바로 전에 올 것인가? (나는 실제적으로 최고야.) – Matt

+0

그룹 앞에 tcum의 첫 번째 절에 넣습니다. –

+0

없음 운 :(은 "nextfill"열 그냥 쿼리에 오타가있어 아래 – Matt