This is the RAC version of Jeff Modens fine article on dynamic crosstabs for sql server at: Cross Tabs and Pivots, Part 2 - Dynamic Cross Tabs 2008/12/03 www.sqlservercentral.com/articles/cross+tab/65048/ The data is generated by the method outlined in the article. The table was populated with 1 millions rows - Basic crosstab. 2 secs in QA for S2005. Exec Rac @transform='Sum(SomeMoney) as SumMony', @rows='Someletters2', @pvtcol='(left(datename(mm,DATEADD(mm,DATEDIFF(mm,0,SomeDate),0)),3)+~ ~+ cast(year(DATEADD(mm,DATEDIFF(mm,0,SomeDate),0)) as char(4))) as mthyr', @pvtsort='month(DATEADD(mm,DATEDIFF(mm,0,SomeDate),0))', -- Sort pivot expression by an integer. @from='##JBMTest', @WHERE='SomeDate>=~Jan 1 2008 12:00AM~ AND SomeDate<~Jul 1 2008 12:00AM~', @rowtotalsposition='end',@racheck='y',@shell='n' Someletters2 Funct Jan 2008 Feb 2008 Mar 2008 Apr 2008 May 2008 Jun 2008 Totals ------------ ------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- AA SumMony 685.67 763.64 656.13 575.93 879.13 192.13 3752.63 AB SumMony 927.06 928.98 280.20 632.43 560.99 785.50 4115.16 AC SumMony 791.09 555.18 916.71 273.23 187.48 508.31 3232.00 AD SumMony 250.04 341.58 426.53 645.56 670.13 422.86 2756.70 AE SumMony 809.14 487.21 295.33 625.92 716.12 527.19 3460.91 . . ZY SumMony 776.32 682.98 326.17 677.69 546.87 926.54 3936.57 ZZ SumMony 532.75 500.92 277.93 636.40 607.05 553.43 3108.48 Totals SumMony 433997.25 383211.70 411913.12 411878.29 425431.07 409809.47 2476240.90 Here some additional bells and whistles are thrown in:) -- Executed in 26 secs in QA for S2005. Exec Rac -- The same transformed repeated twice for different purposes. @transform='Sum(SomeMoney) as SumMony & Sum(SomeMoney) as [% row]', @rows='Someletters2', @pvtcol='(left(datename(mm,DATEADD(mm,DATEDIFF(mm,0,SomeDate),0)),3)+~ ~+ cast(year(DATEADD(mm,DATEDIFF(mm,0,SomeDate),0)) as char(4))) as mthyr', @pvtsort='month(DATEADD(mm,DATEDIFF(mm,0,SomeDate),0))', @from='##JBMTest', @WHERE='SomeDate>=~Jan 1 2008 12:00AM~ AND SomeDate<~Jul 1 2008 12:00AM~', @rowtotalsposition='end',@racheck='y',@pformat='_pvtcols_',@shell='n',@translabel='Summary', -- Display min and max sum for each Someletters along with pivot (date) it occurred. -- The min and max are displayed in separate rows. Default is same row for all rowfunctions. @rowfunctions='min(SumMony) & max(SumMony)',@rowfunctionslabel='Min/Max',@displayrowfunctions='m', -- Running sum of pivot columns for each row from left to right. The pivot sum is followed by the -- run in each cell. @colruns='SumMony', -- The percentage of the pivot sum/[row total] displayed in a separate row. @cpercents='[% row] %only' -- a different transform alias to force a separate row. -- We could display in same row as sum (and column runs). Someletters2 Summary Min/Max Jan 2008 Feb 2008 Mar 2008 Apr 2008 May 2008 Jun 2008 Totals ------------ ------- ----------------------- ------------------- ------------------- -------------------- -------------------- -------------------- -------------------- ---------- AA SumMony min(192.13,Jun 2008) 685.67/685.67 763.64/1449.31 656.13/2105.44 575.93/2681.37 879.13/3560.50 192.13/3752.63 3752.63 max(879.13,May 2008) % row 18.3% 20.3% 17.5% 15.3% 23.4% 5.1% - AB SumMony min(280.20,Mar 2008) 927.06/927.06 928.98/1856.04 280.20/2136.24 632.43/2768.67 560.99/3329.66 785.50/4115.16 4115.16 max(928.98,Feb 2008) % row 22.5% 22.6% 6.8% 15.4% 13.6% 19.1% - AC SumMony min(187.48,May 2008) 791.09/791.09 555.18/1346.27 916.71/2262.98 273.23/2536.21 187.48/2723.69 508.31/3232.00 3232.00 max(916.71,Mar 2008) % row 24.5% 17.2% 28.4% 8.5% 5.8% 15.7% - AD SumMony min(250.04,Jan 2008) 250.04/250.04 341.58/591.62 426.53/1018.15 645.56/1663.71 670.13/2333.84 422.86/2756.70 2756.70 max(670.13,May 2008) % row 9.1% 12.4% 15.5% 23.4% 24.3% 15.3% - AE SumMony min(295.33,Mar 2008) 809.14/809.14 487.21/1296.35 295.33/1591.68 625.92/2217.60 716.12/2933.72 527.19/3460.91 3460.91 max(809.14,Jan 2008) % row 23.4% 14.1% 8.5% 18.1% 20.7% 15.2% - AF SumMony min(406.49,May 2008) 788.30/788.30 415.40/1203.70 605.56/1809.26 613.81/2423.07 406.49/2829.56 520.40/3349.96 3349.96 max(788.30,Jan 2008) . . ZY SumMony min(326.17,Mar 2008) 776.32/776.32 682.98/1459.30 326.17/1785.47 677.69/2463.16 546.87/3010.03 926.54/3936.57 3936.57 max(926.54,Jun 2008) % row 19.7% 17.3% 8.3% 17.2% 13.9% 23.5% - ZZ SumMony min(277.93,Mar 2008) 532.75/532.75 500.92/1033.67 277.93/1311.60 636.40/1948.00 607.05/2555.05 553.43/3108.48 3108.48 max(636.40,Apr 2008) % row 17.1% 16.1% 8.9% 20.5% 19.5% 17.8% - Totals SumMony min(383211.70,Feb 2008) 433997.25/433997.25 383211.70/817208.95 411913.12/1229122.07 411878.29/1641000.36 425431.07/2066431.43 409809.47/2476240.90 2476240.90 max(433997.25,Jan 2008) % row 17.5% 15.5% 16.6% 16.6% 17.2% 16.5% -
Dataphor SQL RAC (Relational Application Companion)
A site of hope for those looking for a true relational database system
- a one-one requirement constraint with dataphor (1)
- anatomy of sql server part I - what is a stored procedure (1)
- anatomy of sql server part II - the unit test as part of the database (1)
- anatomy of sql server part III - what does deferred name resolution really mean (1)
- censoring sql posts (1)
- creating an opposite constraint in dataphor (1)
- dataphor (2)
- Dataphor (7)
- dataphor # 13 a table as a parameter (1)
- dataphor - download and start working with it (1)
- dataphor - fixed sized word segments (1)
- dataphor # 10 sql mythology (1)
- dataphor # 11 string differences (1)
- dataphor # 12 trimming a string (1)
- dataphor # 14 sql the meaning of Update..From (1)
- dataphor # 15 views with substance (1)
- dataphor # 16 inclusive vs exclusive solutions (1)
- dataphor # 17 a visual look at ranking queries (1)
- dataphor # 18 data scrubbing using lists (1)
- dataphor # 19 create intervals over strings (1)
- dataphor # 20 browsing an sql window (1)
- dataphor # 21 an example of relational division (1)
- dataphor # 22 reusable procedures (1)
- dataphor # 23 repley to Michel (1)
- dataphor # 24 basics of the table type (1)
- dataphor # 25 extending the dense rank function (1)
- dataphor # 26 query a hierarchy with explode (1)
- dataphor # 27 combine strings with Split and Concat (1)
- dataphor # 28 constants and variables or sql and D4 (1)
- dataphor # 29 another example of relational division (1)
- dataphor #1 introduction (1)
- dataphor #2 splitting strings (1)
- dataphor #3 string concatenation (1)
- dataphor #4 comment (1)
- dataphor #5 comment (1)
- dataphor #6 formal definition (1)
- dataphor #7 sql: table this (1)
- dataphor #8 list to table (1)
- dataphor #9 table constraints (1)
- dataphor creating lists in a query (1)
- extracting numbers from a string with dataphor (1)
- jeff modens dynamic crosstabs for sql server (1)
- linq to sql the what and why (1)
- linq to sql as a window of opportunity to sql users (1)
- linq to sql should be important to sql users (1)
- linq to sql vs. older 4GL attempts (1)
- listing missing table item (1)
- Multiple cascade paths to the same table (1)
- RAC (4)
- RAC #1 comment (1)
- RAC #2 example (1)
- RAC #3 finding the Nth number in a string (1)
- RAC #4 Sql Server 2005 ranking functions vs. Rac ranking (1)
- sorting a delimited string by its numerical string parts (1)
- sql an example of extreme implicit conversions (1)
- sql can't handle complicated cascading updates (1)
- sql CTE should be a variable not a value (1)
- sql dense rank for identifying consecutive runs (1)
- sql is there really a table variable (1)
- sql ranking functions explained by relational types (1)
- sql server triggers are best set based (1)
- sql the idea of using substring to simulate lists (1)
- sql the undefined trigger in Sql Server (1)
- sql vs relational on tables (1)
- sql what the sql CTE covers up (1)
- types and procedures (1)
Saturday, December 06, 2008
Sql server dynamic crosstabs by Jeff Moden
Subscribe to:
Post Comments (Atom)
2 comments:
Nice post and this enter helped me alot in my college assignement. Thanks you as your information.
This cannot have effect as a matter of fact, that is what I suppose.
Post a Comment