• Atyeo9 - Tuesday, March 20, 2018 10:14 AM

    My head is well and truly mashed and I could do with some help please...
    I need to write a script to count the number of records opened and closed in certain dates.  This will require a pivot eventually but essentially we're looking at two tables - one has the open date, the other the closed date.  Both have a matching id.  So far so good.  Where I'm struggling is that I need to do a monthly breakdown that needs to be dynamic and increase each month to show the number of records closed in a given month number for a given month.   I'm having difficulty even explaining it let alone coding it!

    Example: 
    10 cases are opened in January
    12 in Feb
    3 in March

    Of the 10 opened in January, 2 are closed in January (Month 1), 3 are closed in February (Month 2) and 5 are closed in March (Month 3)
    Of the 12 opened in February, 7 are closed in February (Month 1), 1 in March (Month 2)
    Of the 3 opened in March, 1 is closed in March (Month 1)

    This would therefore be reflected something like:
    data:image/png;base64,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
    Each month of the report another month is added to row and column.
    Just to make things simple the figure actually needs to be percentage rather than number, but baby steps!

    Thanks for any pointers....

    It's pretty simple.  Calculate your stuff vertically, as normal.  Then do a "Dynamic Crosstab".  Please see the following article for details. 
    http://www.sqlservercentral.com/articles/Crosstab/65048/

    --Jeff Moden


    RBAR is pronounced "ree-bar" and is a "Modenism" for Row-By-Agonizing-Row.
    First step towards the paradigm shift of writing Set Based code:
    ________Stop thinking about what you want to do to a ROW... think, instead, of what you want to do to a COLUMN.

    Change is inevitable... Change for the better is not.


    Helpful Links:
    How to post code problems
    How to Post Performance Problems
    Create a Tally Function (fnTally)