0

이 함수 최적화 도움이 필요하십니까 시작 날짜. 그런 다음 해당 항목의 총 판매액을 찾아 매출액에서 수령액을 빼십시오. 나머지는 (판매되지 않은) 노약자로 간주되며 다음 달에 대해 평가됩니다. 그 다음 달로 이동하여 음수 또는 0이 될 때까지이 과정을 반복합니다. 음수이면 해당 날짜까지 판매 된 것보다 많은 달을 쳤고 그 양은 노화 된 것으로 간주됩니다 판매되지 않음). 평가할 개월이 더 있다면 추가로받은 금액은 판매되지 않은 것으로 명확히 표시되어 있으므로 기본적으로 노령으로 간주됩니다. 이것은 우리가 모든 일에받은 판매 된 것을 알려줍니다는 TSQL 테이블 가치가 여기에 기능

ItemLookupCode Month Rcvd Sold Aged 
21208641  4  48  40  0 
21208641  5  120  24  81 
21208641  6  0  12  0 
21208641  7  60  9  60 
21208641  8  0  2  0 

: 여기

ID  ItemID ItemLookupCode HQAdjustment FirstTransferred  Rcvd RcvdDateEarly   RcvdDateLate   Sold SoldDateEarly   SoldDateLate   Sales Month Year StartOfMonthQty EndOfMonthQty 
17350 188993 21208641  0    2012-04-05 13:29:14.000 48  2012-04-27 11:00:40.100 2012-04-27 11:00:40.100 40  2012-04-05 13:29:14.000 2012-04-30 12:50:13.000 75.20 4  2012 0    8 
34427 188993 21208641  0    2012-04-05 13:29:14.000 120  2012-05-22 10:14:40.213 2012-05-22 10:14:40.213 24  2012-05-04 17:42:12.000 2012-05-29 10:22:10.000 44.72 5  2012 8    104 
48437 188993 21208641  0    2012-04-05 13:29:14.000 0  NULL     NULL     12  2012-06-02 16:24:45.000 2012-06-21 11:15:05.000 22.36 6  2012 104    92 
62369 188993 21208641  0    2012-04-05 13:29:14.000 60  2012-07-16 12:57:33.330 2012-07-16 12:57:33.330 9  2012-07-11 14:42:01.000 2012-07-25 14:58:41.000 16.22 7  2012 92    143 
75781 188993 21208641  0    2012-04-05 13:29:14.000 0  NULL     NULL     2  2012-08-01 12:56:10.000 2012-08-14 19:01:00.000 4.01 8  2012 143    141 

위의 데이터에 대한 내 함수의 결과입니다 : 여기

는 평가를 위해 사용되는 테이블에서 샘플 데이터입니다 4 월. 5 월에 다시 주문되었지만 일부는 판매되었지만 여전히 재고가 남아 있습니다 (노인). 그런 다음 7 월에 재고를 판매하지 않고 우리는 더 많은 주문을했고 따라서 재고는 자동으로 노화 된 것으로 간주됩니다.

이 기능의 목적은 위에서 발생한 일을 중지하는 것입니다. 세 (판매되지 않은) 인벤토리가있는 상품을 주문합니다. 또한 부서의 얼마나 많은 부분을 평가하고 세일 품목을 없애기 위해 판매를 시작해야 하는지를 평가하는데도 사용됩니다.

문제는 평가할 항목이 40,000 개 이상 있다는 것입니다. 이 기능은 단일 항목에는 효과적이지만 100 항목에는 30 초가 걸립니다. 나는 누군가가 오랫동안 와서 내 기능을보고 그것이 완전히 잘못된 길로 가고 있다는 것을 깨달을 수 있기를 바라고있다. 인라인 계산을 수행하고 나머지를 수행하면 위대 할 것입니다.

나는 기본적으로 단순화 의사 코드이 필요합니다

Foreach (Month2Date) 
If AllInventoryAged = 1 Then //This says we've reached our sales:rcved thresh-hold and all received inventory is aged from here on out. 
    ThisMonthAged = RcvedForMonth 
Else 
    TotalSales - RcvedForMonth = Aged 
    If Aged < 0 Then 
     ThisMonthAged = Aged * -1 //We received more than sold so it's negative and we have hit our sales:rcved thresh-hold. 
     AllInventoryAged = 1 //Anything received from this point on is aged. 
    Else  
     ThisMonthAged = 0 //We received less this month then sold. A good thing. 
     TotalSales = Aged //We carry on the remainder for further evaluation 

나는 나 자신이 시간을 설명하는 철저한왔다 바랍니다. 미안해. 너무 오래. 나는 단지 내가 나의 마지막 지위에서 가지고 있었던 모든 질문을 포함하고 정말로 싶었다.

+0

: 당신은 여기 내 관련 "테스트"코드를 볼 수 있습니다. 왜 Aged = 81 = 96 = 120-24입니까? –

+0

@ GordonLinoff 5 번째 달의 노령 인구는 81 세입니다. 왜냐하면 그 달의 매출이 아니라 총 매출을 차지하기 때문입니다. 첫 번째 달에서 48을받는 것을 빼면 87이됩니다. 39. 그것이 긍정적이라는 사실은 첫 달 동안받은 모든 것을 0으로 남겨두고 팔았다 고 말합니다. 다음 달까지 39를 나르고 그로부터받는 것을 빼십시오. - 81주는 것. 즉, 해당 달에 81 단위를 제외한 모든 단위를 판매했습니다. 그것이 부정적인 사실은 우리가 판매 된 것 이상을 받았다고 말합니다. 그 이후로 가장 오래된 인벤토리를 먼저 판매하기 때문에 추가 인벤토리는 자동으로 만료됩니다. – jayEss

+0

총 매출액의 합계와 총 누계액의 차이를 얻으려고하십니까? 하나의 쿼리에서이 작업을 수행 할 수 있습니다. –

답변