How can i bring this result,without using dynamic query

  • Table Structure

    Location Year Qty1 Qty2 Qty3 Qty4 Qty5 Qty6 Qty7 Qty8 Qty9 Qty10 Qty11 Qty12

    Atp 2010 6700 20770 9430 0 0 0 0 0 0 0 0 0

    Atp 2010 4209 0 0 0 0 0 0 0 0 0 0 0 null null

    in the above table qty1,qty2 represent as month.

    If i send month 4

    Here i need to calculate (qty1+ qty2+qty3+qty4) current, (qty5+qty6) Forcast. in another column

    If i send month 6

    Here i need to calculate (qty1+ qty2+qty3+qty4+qty5+qty6) current, (qty7+qty8) Forcast. in another column

    How can i bring this result can u please guide me through sample code

  • It is possible that you can change the design of the table ?

    A table with the structure of

    Location

    Year

    Month

    Quantity

    Would be easier to process.

    Whenever I see a table with repeating column names appended with numbers, I cringe in horror.

    http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/



    Clear Sky SQL
    My Blog[/url]

  • Here we cant change the table structure. b'coz already running in production server.so that only

  • Well , you could make the best of a bad job by unpivoting (either by using UNPIVOT or using a case statement) the data first to fake a correct structure.



    Clear Sky SQL
    My Blog[/url]

  • It does look like the table in your eample is populated by some PIVOTING query. I would recommend to have a look it and see where data is comming from originaly. Then, you can, most likley, easely implement what you want making your quiry on the original source table(s).

    _____________________________________________
    "The only true wisdom is in knowing you know nothing"
    "O skol'ko nam otkrytiy chudnyh prevnosit microsofta duh!":-D
    (So many miracle inventions provided by MS to us...)

    How to post your question to get the best and quick help[/url]

  • I'm not suggesting this is a good idea, but if avoiding dynamic sql is your only consideration then this might work.

    Edit: I assumed you wanted the rest of the year in the forecast, if its only the next two months then you would need additional logic.

    DECLARE @input_month INT

    SET @input_month = 4

    DECLARE @factor1 INT, @factor2 INT, @factor3 INT, @factor4 INT, @factor5 INT, @factor6 INT,

    @factor7 INT, @factor8 INT, @factor9 INT, @factor10 INT, @factor11 INT, @factor12 INT

    SELECT @factor1 = CASE WHEN @input_month >= 1 THEN 1 ELSE 0 END,

    @factor2 = CASE WHEN @input_month >= 2 THEN 1 ELSE 0 END,

    @factor3 = CASE WHEN @input_month >= 3 THEN 1 ELSE 0 END,

    @factor4 = CASE WHEN @input_month >= 4 THEN 1 ELSE 0 END,

    @factor5 = CASE WHEN @input_month >= 5 THEN 1 ELSE 0 END,

    @factor6 = CASE WHEN @input_month >= 6 THEN 1 ELSE 0 END,

    @factor7 = CASE WHEN @input_month >= 7 THEN 1 ELSE 0 END,

    @factor8 = CASE WHEN @input_month >= 8 THEN 1 ELSE 0 END,

    @factor9 = CASE WHEN @input_month >= 9 THEN 1 ELSE 0 END,

    @factor10 = CASE WHEN @input_month >= 10 THEN 1 ELSE 0 END,

    @factor11 = CASE WHEN @input_month >= 11 THEN 1 ELSE 0 END,

    @factor12 = CASE WHEN @input_month >= 12 THEN 1 ELSE 0 END

    SELECT (Qty1*@factor1) + (Qty2*@factor2) + (Qty3*@factor3) + (Qty4*@factor4) +

    (Qty5*@factor5) + (Qty6*@factor6) + (Qty7*@factor7) + (Qty8*@factor8) +

    (Qty9*@factor9) + (Qty10*@factor10) + (Qty11*@factor11) + (Qty12*@factor12) as current_value,

    (Qty1*(1-@factor1)) + (Qty2*(1-@factor2)) + (Qty3*(1-@factor3)) + (Qty4*(1-@factor4)) +

    (Qty5*(1-@factor5)) + (Qty6*(1-@factor6)) + (Qty7*(1-@factor7)) + (Qty8*(1-@factor8)) +

    (Qty9*(1-@factor9)) + (Qty10*(1-@factor10)) + (Qty11*(1-@factor11)) + (Qty12*(1-@factor12)) as forcast_value

  • Hello friend,

    Really nice. i got exact result for current value. but forecast value is getting wrong result.

    my requirement is

    If month is 4

    Current value- (Qty1+Qty2+Qty3+Qty4)

    forecast value- (Qty5+Qty6)

    If month is 5

    Current value- (Qty1+Qty2+Qty3+Qty4+Qty5)

    forecast value- (Qty6+Qty7)

    suppose if its month is 11

    Current value- (Qty1+Qty2+Qty3+Qty4+Qty5....+Qty11)

    forecast value- (Qty12+0)

    if its month is 12

    Current value- (Qty1+Qty2+Qty3+Qty4+Qty5....+Qty11+Qty12)

    forecast value- (0+0)

    How can i bring this result. can you please guide me.

  • This is even more convoluted, but it might work.

    I would be inclined to unpivot the data, but that might be equally clumsy.

    DECLARE @input_month INT

    SET @input_month = 4

    DECLARE @factor1 INT, @factor2 INT, @factor3 INT, @factor4 INT, @factor5 INT, @factor6 INT,

    @factor7 INT, @factor8 INT, @factor9 INT, @factor10 INT, @factor11 INT, @factor12 INT,

    @fc_factor1 INT, @fc_factor2 INT, @fc_factor3 INT, @fc_factor4 INT, @fc_factor5 INT, @fc_factor6 INT,

    @fc_factor7 INT, @fc_factor8 INT, @fc_factor9 INT, @fc_factor10 INT, @fc_factor11 INT, @fc_factor12 INT

    SELECT @factor1 = CASE WHEN @input_month >= 1 THEN 1 ELSE 0 END,

    @factor2 = CASE WHEN @input_month >= 2 THEN 1 ELSE 0 END,

    @factor3 = CASE WHEN @input_month >= 3 THEN 1 ELSE 0 END,

    @factor4 = CASE WHEN @input_month >= 4 THEN 1 ELSE 0 END,

    @factor5 = CASE WHEN @input_month >= 5 THEN 1 ELSE 0 END,

    @factor6 = CASE WHEN @input_month >= 6 THEN 1 ELSE 0 END,

    @factor7 = CASE WHEN @input_month >= 7 THEN 1 ELSE 0 END,

    @factor8 = CASE WHEN @input_month >= 8 THEN 1 ELSE 0 END,

    @factor9 = CASE WHEN @input_month >= 9 THEN 1 ELSE 0 END,

    @factor10 = CASE WHEN @input_month >= 10 THEN 1 ELSE 0 END,

    @factor11 = CASE WHEN @input_month >= 11 THEN 1 ELSE 0 END,

    @factor12 = CASE WHEN @input_month >= 12 THEN 1 ELSE 0 END

    SELECT @fc_factor1 = CASE WHEN @input_month IN (0,0) THEN 1 ELSE 0 END,

    @fc_factor2 = CASE WHEN @input_month IN (0,1) THEN 1 ELSE 0 END,

    @fc_factor3 = CASE WHEN @input_month IN (2,2) THEN 1 ELSE 0 END,

    @fc_factor4 = CASE WHEN @input_month IN (2,3) THEN 1 ELSE 0 END,

    @fc_factor5 = CASE WHEN @input_month IN (3,4) THEN 1 ELSE 0 END,

    @fc_factor6 = CASE WHEN @input_month IN (4,5) THEN 1 ELSE 0 END,

    @fc_factor7 = CASE WHEN @input_month IN (5,6) THEN 1 ELSE 0 END,

    @fc_factor8 = CASE WHEN @input_month IN (6,7) THEN 1 ELSE 0 END,

    @fc_factor9 = CASE WHEN @input_month IN (7,8) THEN 1 ELSE 0 END,

    @fc_factor10 = CASE WHEN @input_month IN (8,9) THEN 1 ELSE 0 END,

    @fc_factor11 = CASE WHEN @input_month IN (9,10) THEN 1 ELSE 0 END,

    @fc_factor12 = CASE WHEN @input_month IN (10,11) THEN 1 ELSE 0 END

    SELECT (Qty1*@factor1) + (Qty2*@factor2) + (Qty3*@factor3) + (Qty4*@factor4) +

    (Qty5*@factor5) + (Qty6*@factor6) + (Qty7*@factor7) + (Qty8*@factor8) +

    (Qty9*@factor9) + (Qty10*@factor10) + (Qty11*@factor11) + (Qty12*@factor12) as current_value,

    (Qty1*(@fc_factor1)) + (Qty2*(@fc_factor2)) + (Qty3*(@fc_factor3)) + (Qty4*(@fc_factor4)) +

    (Qty5*(@fc_factor5)) + (Qty6*(@fc_factor6)) + (Qty7*(@fc_factor7)) + (Qty8*(@fc_factor8)) +

    (Qty9*(@fc_factor9)) + (Qty10*(@fc_factor10)) + (Qty11*(@fc_factor11)) + (Qty12*(@fc_factor12)) as forcast_value

  • Hi,

    Really fantastic.Thanx a lot . I have small doubt in this.

    (ie.) eg.

    If month is 4

    Current value- (Qty1+Qty2+Qty3+Qty4)

    forecast1 value- (Qty5)

    forecast2 value- (Qty6)

    If month is 5

    Current value- (Qty1+Qty2+Qty3+Qty4+Qty5)

    forecast1 value- (Qty6)

    forecast2 value- (Qty7)

    suppose if its month is 11

    Current value- (Qty1+Qty2+Qty3+Qty4+Qty5....+Qty11)

    forecast1 value- (Qty12)

    forecast2 value- (0)

    if its month is 12

    Current value- (Qty1+Qty2+Qty3+Qty4+Qty5....+Qty11+Qty12)

    forecast1 value- (0)

    forecast2 value- (0)

    Here i need to forecast two value separtly like forecast 1 and forecast2. How can i make changes in above query. can u please guide me.

Viewing 9 posts - 1 through 8 (of 8 total)

You must be logged in to reply to this topic. Login to reply