Dynamic pivot and calculating total and ordering the total

  • Create table #temp

    (

    UserName Varchar(100),

    Report_Date Date,

    Time_MS BIGINT,

    TIME_COLUMN TIME

    )

    INSERT INTO #temp (UserName,Report_Date,Time_MS,TIME_COLUMN) Values

    ('DK1','2017-08-16',3494,'00:00:03.494'),

    ('DK1','2017-08-16',5241,'00:00:05.241'),

    ('DK2','2017-08-16',1747,'00:00:01.747'),

    ('DK2','2017-08-16',19217,'00:00:19.217'),

    ('DK2','2017-08-16',13976,'00:00:13.976'),

    ('DK3','2017-08-17',13976,'00:00:13.976'),

    ('DK3','2017-08-17',3494,'00:00:03.494'),

    ('DK5','2017-08-17',41928,'00:00:41.928'),

    ('DK6','2017-08-17',10482,'00:00:10.482'),

    ('DK7','2017-08-17',13976,'00:00:13.976'),

    ('DK8','2017-08-17',34940,'00:00:34.940'),

    ('DK9','2017-08-18',5241,'00:00:05.241'),

    ('DK1','2017-08-18',5241,'00:00:05.241'),

    ('DK2','2017-08-18',8735,'00:00:08.735'),

    ('DK3','2017-08-18',1747,'00:00:01.747'),

    ('DK4','2017-08-18',15723,'00:00:15.723'),

    ('DK5','2017-08-18',6988,'00:00:06.988'),

    ('DK6','2017-08-18',19217,'00:00:19.217'),

    ('DK7','2017-08-18',24458,'00:00:24.458'),

    ('DK8','2017-08-18',8735,'00:00:08.735'),

    ('DK9','2017-08-18',24458,'00:00:24.458')

    data:image/png;base64,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

    I have provided input and required out  putand right side total should be order by desc, Please let me know if any questions, Thank You guys for help 🙂

  • So do you already have a query to do that? If so, please post it.

    If you haven't even tried to resolve your issue, please don't expect the hard-working volunteers here to waste their time providing links to answers which you could easily have found yourself.

  • FROM #TEMP c

    FOR XML PATH(''), TYPE

    ).value('.', 'NVARCHAR(MAX)')

    ,1,1,'')

    set @query = 'SELECT UserName,ID, ' + @cols + ' from

    (

    select Username

    , HH

    ,ID

    ,Report_Date

    from #TEMP

    ) x

    pivot

    (

    max(TIME_COLUMN)

    for Report_Date in (' + @cols + ')

    ) p '

    EXEC(@query)

    I have added '31/12/2999' to get total, but I feel its not working as expected ,Thanks

  • Do you have to do this in SQL, or could you use a different tool? SSRS and a Matrix would be much easier, or even Excel and a Pivot Table.

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • That's what I was gonna say... If I had the option, I'd do this in SSRS.. .Could do this in about 20 seconds.

  • I'm thinking that this is actually a pretty easy thing to do using a CROSS TAB with ROLLUP and a bit of SQL prestidigitation with pre-aggregation, the summing of times, and doing the standard thing of keeping the data layer code separate from the presentation code even if it is in the same query.  I'll give it a try after work tonight.

    And thank you very much for posting readily consumable test data.  It does help a whole lot.

    --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)
    Intro to Tally Tables and Functions

  • Hi Thom A /pietlinden

    I'm good with SSRS, As far I know we have to use Matrix here, but how sum will work , for example user dk1 can have multiple entries for same day( multiple time entries) and how we can sum all dates sum for one user and grand total

  • koti.raavi - Wednesday, August 23, 2017 8:39 AM

    Hi Thom A /pietlinden

    I'm good with SSRS, As far I know we have to use Matrix here, but how sum will work , for example user dk1 can have multiple entries for same day( multiple time entries) and how we can sum all dates sum for one user and grand total

    SSRS can do groupings. Just like sql, you use SUM:
    SUM(Fields!Time_MS.Value)

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Thom A - Wednesday, August 23, 2017 8:47 AM

    koti.raavi - Wednesday, August 23, 2017 8:39 AM

    Hi Thom A /pietlinden

    I'm good with SSRS, As far I know we have to use Matrix here, but how sum will work , for example user dk1 can have multiple entries for same day( multiple time entries) and how we can sum all dates sum for one user and grand total

    SSRS can do groupings. Just like sql, you use SUM:
    SUM(Fields!Time_MS.Value)

    Yes, I know that, I need sum on Time_column not on Time_Ms 🙁 , thanks for response

  • koti.raavi - Wednesday, August 23, 2017 8:52 AM

    Yes, I know that, I need sum on Time_column not on Time_Ms 🙁 , thanks for response

    Time_MS is a millisecond version of Time_column though, right? So Summing that field is still fine. you just need to do a little logic to turn it into a "time":
    =Dateadd("d",0, "01/01/2000").AddMilliseconds(Sum(Fields!Time_MS.Value))

    Thom~

    Excuse my typos and sometimes awful grammar. My fingers work faster than my brain does.
    Larnu.uk

  • Thom A - Wednesday, August 23, 2017 9:06 AM

    koti.raavi - Wednesday, August 23, 2017 8:52 AM

    Yes, I know that, I need sum on Time_column not on Time_Ms 🙁 , thanks for response

    Time_MS is a millisecond version of Time_column though, right? So Summing that field is still fine. you just need to do a little logic to turn it into a "time":
    =Dateadd("d",0, "01/01/2000").AddMilliseconds(Sum(Fields!Time_MS.Value))

    Perfect, little logic working fine, thank you so much  Thom:)

  • Heh... bit of a long day for me.  Just getting back from work.  Glad you folks sussed it.  Nice job, Thom!

    --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)
    Intro to Tally Tables and Functions

Viewing 12 posts - 1 through 11 (of 11 total)

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