이 함수 최적화 도움이 필요하십니까 시작 날짜. 그런 다음 해당 항목의 총 판매액을 찾아 매출액에서 수령액을 빼십시오. 나머지는 (판매되지 않은) 노약자로 간주되며 다음 달에 대해 평가됩니다. 그 다음 달로 이동하여 음수 또는 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
나는 나 자신이 시간을 설명하는 철저한왔다 바랍니다. 미안해. 너무 오래. 나는 단지 내가 나의 마지막 지위에서 가지고 있었던 모든 질문을 포함하고 정말로 싶었다.
: 당신은 여기 내 관련 "테스트"코드를 볼 수 있습니다. 왜 Aged = 81 = 96 = 120-24입니까? –
@ GordonLinoff 5 번째 달의 노령 인구는 81 세입니다. 왜냐하면 그 달의 매출이 아니라 총 매출을 차지하기 때문입니다. 첫 번째 달에서 48을받는 것을 빼면 87이됩니다. 39. 그것이 긍정적이라는 사실은 첫 달 동안받은 모든 것을 0으로 남겨두고 팔았다 고 말합니다. 다음 달까지 39를 나르고 그로부터받는 것을 빼십시오. - 81주는 것. 즉, 해당 달에 81 단위를 제외한 모든 단위를 판매했습니다. 그것이 부정적인 사실은 우리가 판매 된 것 이상을 받았다고 말합니다. 그 이후로 가장 오래된 인벤토리를 먼저 판매하기 때문에 추가 인벤토리는 자동으로 만료됩니다. – jayEss
총 매출액의 합계와 총 누계액의 차이를 얻으려고하십니까? 하나의 쿼리에서이 작업을 수행 할 수 있습니다. –