<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    
    <title>BostonGIS - generate_series</title>
    <link>https://www.bostongis.com/blog/</link>
    <description>Open Source GIS</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 2.3.5 - http://www.s9y.org/</generator>
    <pubDate>Mon, 24 Nov 2008 08:43:36 GMT</pubDate>

    <image>
    <url>https://www.bostongis.com/blog/templates/default/img/s9y_banner_small.png</url>
    <title>RSS: BostonGIS - generate_series - Open Source GIS</title>
    <link>https://www.bostongis.com/blog/</link>
    <width>100</width>
    <height>21</height>
</image>

<item>
    <title>Chocolate and Peanut Butter Cross-Breeding with PostgreSQL, SQL Server 2008, and Oracle</title>
    <link>https://www.bostongis.com/blog/index.php?/archives/146-Chocolate-and-Peanut-Butter-Cross-Breeding-with-PostgreSQL,-SQL-Server-2008,-and-Oracle.html</link>
            <category>dbii</category>
            <category>generate_series</category>
            <category>microsoft</category>
            <category>oracle</category>
            <category>postgis postgresql</category>
            <category>sql server 2008</category>
    
    <comments>https://www.bostongis.com/blog/index.php?/archives/146-Chocolate-and-Peanut-Butter-Cross-Breeding-with-PostgreSQL,-SQL-Server-2008,-and-Oracle.html#comments</comments>
    <wfw:comment>https://www.bostongis.com/blog/wfwcomment.php?cid=146</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://www.bostongis.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=146</wfw:commentRss>
    

    <author>nospam@example.com (Regina Obe)</author>
    <content:encoded>
    &lt;p&gt;I&#039;ve been whining a lot lately about how SQL Server 2008 (and none of the other SQL Server&#039;s)
have a generate_series() function that I have grown to love in PostgreSQL.  Admittedly I&#039;ve just been too lazy to 
create one even though its not that difficult of a task. &lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.spatialdbadvisor.com/&quot; target=&quot;_blank&quot;&gt;Simon Greener over at Spatial DBAdvisor&lt;/a&gt; heard my whining and I guess got fed up enough 
to create a &lt;a href=&quot;http://www.spatialdbadvisor.com/sql_server_blog/86/generate_series-for-sql-server-2008&quot; target=&quot;_blank&quot;&gt;generate_series() function for SQL Server 2008&lt;/a&gt;.  
He also has &lt;a href=&quot;http://www.spatialdbadvisor.com/oracle_spatial_tips_tricks/82/generate_series-an-oracle-implementation-in-light-of-sql-design-patterns&quot; target=&quot;_blank&quot;&gt;a generate_series function for Oracle too&lt;/a&gt; by the way.&lt;/p&gt;

&lt;p&gt;Now there are a couple of differences between the way you use it in the 3 databases which are caused
by fundamental differences between the architectures of the 3 databases.&lt;/p&gt; &lt;a class=&quot;block_level&quot; href=&quot;https://www.bostongis.com/blog/index.php?/archives/146-Chocolate-and-Peanut-Butter-Cross-Breeding-with-PostgreSQL,-SQL-Server-2008,-and-Oracle.html#extended&quot;&gt;Continue reading &quot;Chocolate and Peanut Butter Cross-Breeding with PostgreSQL, SQL Server 2008, and Oracle&quot;&lt;/a&gt;
    </content:encoded>

    <pubDate>Fri, 21 Nov 2008 15:35:00 -0500</pubDate>
    <guid isPermaLink="false">https://www.bostongis.com/blog/index.php?/archives/146-guid.html</guid>
    
</item>
<item>
    <title>Map Dicing and other stuff</title>
    <link>https://www.bostongis.com/blog/index.php?/archives/35-Map-Dicing-and-other-stuff.html</link>
            <category>generate_series</category>
            <category>microsoft</category>
            <category>postgis postgresql</category>
    
    <comments>https://www.bostongis.com/blog/index.php?/archives/35-Map-Dicing-and-other-stuff.html#comments</comments>
    <wfw:comment>https://www.bostongis.com/blog/wfwcomment.php?cid=35</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>https://www.bostongis.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=35</wfw:commentRss>
    

    <author>nospam@example.com (Regina Obe)</author>
    <content:encoded>
    &lt;h1&gt;Map Crushers and Silverlight&lt;/h1&gt;
&lt;p&gt;My husband, Leo, and I went to the Re-MIX Boston conference recently.  They have posted some videos of some of the &lt;a target=&quot;_blank&quot; href=&quot;http://www.remix07boston.com/Videos.aspx&quot;&gt;Boston Re-Mix sessions&lt;/a&gt; and more are coming in case anyone wants to see them. &lt;/p&gt;
  
&lt;h2&gt;On the GIS Microsoft Virtual Earth Front&lt;/h2&gt;
I attended the Virtual Earth presentation.  I didn&#039;t get too much out of it that I didn&#039;t know already except for 2 points.
&lt;ul&gt;&lt;li&gt;I spoke to Scott Ellington from MapDotNet who was in the audience and he said &lt;a target=&quot;_blank&quot; href=&quot;http://www.mapdotnet.com/wiki/Wiki%20Pages/Supported%20Geodatabases.aspx&quot;&gt;MapDotNet supports PostGIS&lt;/a&gt;. I knew MapDotNet would be supporting SQL Server 2008 when it comes out and currently supported SQL Server 2005 and Arc SDE, but this tidbit of news was news to me.&lt;/li&gt;
	&lt;li&gt;One of the items showcased was a free product from Microsoft Research called &lt;a target=&quot;_blank&quot; href=&quot;http://research.microsoft.com/research/sn/mapcruncher/default.aspx&quot;&gt;MSR Map Cruncher&lt;/a&gt; which allows one to pre-create custom map tiles at various VEarth Zoom Levels to overlay on Microsoft Virtual Earth. I&#039;m not sure what commercial restrictions it has if any, but this tool is basically a poor man&#039;s tile cache.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;On the Silverlight front&lt;/h2&gt;
&lt;ul&gt;
	&lt;li&gt;First Silverlight 1.0 just got released in the past few weeks and people have started to make bouncing balls using it. In fact most of the Silverlight presentations had
some variant of media player and bouncing balls.  Kind of disappointing.&lt;/li&gt;
	&lt;li&gt;The current incarnation is lacking on pre-packaged controls, can only be client-side script controlled with javascript and generally seems to be annoying as far as integrating with web apps goes. &lt;/li&gt;
	&lt;li&gt;The real stuff is in Silverlight 1.1 with DLR (IronPython, IronRuby, etc.) which is currently in Alpha and more useful controls forthcoming.  This will be out in an 8-12 month timeframe.  The alpha is out but will change a great deal before final release.&lt;/li&gt;
	&lt;li&gt;I went to a talk given by Miguel De Icaza of Novell and Mono fame and it is official that Novell and Microsoft have an agreement where Novell will provide Silverlight compatibility on
		all Linux distros via Moonlight.  It also sounds like Silverlight will deploy similar to Flash where a user is prompted to install when visiting a Silverlight page and the download will be between 1-4 MB.&lt;/li&gt;
	&lt;li&gt;Sadly the neat Moonlight desklets are a Mono/Moonlight enhancement and not part of Silverlight spec and rely on something Miguel called &amp;quot;compass&amp;quot; (I&#039;m sure I&#039;m spelling it wrong), which he thinks is only supported on Linux .&lt;/li&gt;
	&lt;li&gt;In one of the AJAX talks we went to, they demonstrated that the VS 2008 CTP AKA Orcas - supports intellisense of javascript and some more advanced goodies for supporting debugging of javascript such as breakpoint etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
&lt;/p&gt;&lt;h1&gt;Map Dicing in Spatial Databases: PostGIS Example&lt;/h1&gt;
&lt;p&gt;The Microsoft Virtual Earth presentation did get me thinking about map dicing in spatial databases. Normally when I get maps, I get them on a silver platter - already at the lowest granularity I need.
But on rare occasions I would have liked to dice up the data more.  &lt;/p&gt;

&lt;p&gt;Why would you want to do this in a spatial database - particularly PostGIS?  For one - the more granular your data, the more generally useful your spatial indexes since they more closely mirror your actual data and also it is speedier for statistical aggregation and doing thematic maps when spatial joining with bigger pieces if you know that your smaller pieces can be fully contained in your larger area of interest.  To a point though -  at a certain point the over-head of the additional records counteracts the benefits of more useful indexing and also your indexes just become less useful for other reasons.&lt;/p&gt;
&lt;p&gt;Anyrate, the approach I am about to show may not be the best since its something I thought up in my sleep.  &lt;/p&gt;
&lt;p&gt;
The basic approach I would use to dice up say US state boundaries or Massachusetts towns or say census blocks into smaller rectangular quadrants - would be to first create a grid of the extent of the area broken out in even rectangles of x width and y height and then do an intersection with my map of interest to get a new diced map.  
I will not only dice space - but I shall also pseudo-dice attribute data. I say pseudo because I am going to assume that things like population density etc. are even across each town boundary which we know is not true. For data such as census blocks and depending how low you dice, this assumption may not be so inaccurate. &lt;/p&gt;

&lt;p&gt;For those not familiar with the wonders of spatial intersection - take a peak at our explanation of &lt;a target=&quot;_blank&quot; href=&quot;/postgis_intersection_intersects.snippet&quot;&gt;ST_Intersection and ST_Intersects complete with sample diagrams&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This technique uses OGC standard functions so should work as well with slight variation in syntax in other spatial databases such as Oracle Spatial, IBM DB Spatial Extender, MSSQL Spatial etc.  The only part not OGC compliant is my use of the PostgreSQL specific function &lt;b&gt;generate_series&lt;/b&gt;, but this can be easily simulated in other databases by creating a dummy table of numbers say from 0 to 10000.&lt;/p&gt;

&lt;p&gt;
The following SQL calls demonstrate this approach.  I would be interested in learning how real GIS people do this kind of thing.
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Step 1 &lt;/b&gt;- Get the data of interest and load it - for this I will be using &lt;a target=&quot;_blank&quot; href=&quot;http://www.mass.gov/anf/research-and-tech/it-serv-and-support/application-serv/office-of-geographic-information-massgis/datalayers/townsurvey.html&quot;&gt;TOWNSSURVEY_POLYM&lt;/a&gt; from MassGIS.  &lt;br /&gt;
Note psql and pgsql2shp are located in the PostgreSQL bin folder.
&lt;br /&gt;&lt;br /&gt;
&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;&lt;code&gt;shp2pgsql -s 26986 TOWNSSURVEY_POLYM public.towns &amp;gt; towns.sql
psql -h myserver -d mydb -U myuser -f towns.sql
psql -h myserver -d mydb -U myuser -c &amp;quot;CREATE INDEX idx_towns_the_geom ON towns USING gist(the_geom);&amp;quot;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;b&gt;Step 2&lt;/b&gt; - Figure out the extent of your data and the size rectangle you will need to create.  For this I want to know what size rectangle
to make a 200x200 grid (~40000 rows of grid data). 
&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax9&quot;&gt;ceiling&lt;/span&gt;((&lt;span class=&quot;syntax6&quot;&gt;ST_xmax&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_xmin&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;200&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; width, 
    &lt;span class=&quot;syntax9&quot;&gt;ceiling&lt;/span&gt;((&lt;span class=&quot;syntax6&quot;&gt;ST_ymax&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_ymin&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;200&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; height, 
    &lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; thee
    &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; towns
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;&lt;b&gt;Step 3&lt;/b&gt; - Make our throw away grid - alas we found a good use for a cartesian product&lt;br /&gt;
In case it is not quite clear to folks what I am doing here - here it is in simple english &lt;br /&gt;
	&lt;i&gt;Create a reference box starting at the origin of our extent of massachusetts that is of dimension 1485x911 meters - in quasi OGC notation - BOX(xorigin yorigin, (xorigin + 1485) (yorigin + 911))  
	Next take this box and use it as a paint brush to paint across and then down by translating it hor.n*1485, ver.n*911&lt;/i&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;pre&gt;&lt;code&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;TABLE&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;throwaway_grid&lt;/span&gt;(gid SERIAL &lt;span class=&quot;syntax8&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;KEY&lt;/span&gt;);
&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;AddGeometryColumn&lt;/span&gt;(&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;throwaway_grid&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;the_geom&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;26986&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;POLYGON&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;2&lt;/span&gt;);

&lt;span class=&quot;syntax8&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;throwaway_grid&lt;/span&gt;(the_geom)
&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_translate&lt;/span&gt;(ref.boxrep, hor.n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;width, ver.n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;height) &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; slice
&lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt;
(&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_xmin&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; xstart, &lt;span class=&quot;syntax6&quot;&gt;ST_xmin&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; ystart, &lt;span class=&quot;syntax6&quot;&gt;ST_SetSRID&lt;/span&gt;(&lt;span class=&quot;syntax9&quot;&gt;CAST&lt;/span&gt;(&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;BOX(33863.73046875&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;777606.3125,35348.73046875&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;778517.3125)&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; box2d), &lt;span class=&quot;syntax5&quot;&gt;26986&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; boxrep,
&lt;span class=&quot;syntax9&quot;&gt;ceiling&lt;/span&gt;((&lt;span class=&quot;syntax6&quot;&gt;ST_xmax&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_xmin&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;200&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; width, 
    &lt;span class=&quot;syntax9&quot;&gt;ceiling&lt;/span&gt;((&lt;span class=&quot;syntax6&quot;&gt;ST_ymax&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_ymin&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Extent&lt;/span&gt;(the_geom)))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;200&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; height
&lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; towns) &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; ref, &lt;span class=&quot;syntax6&quot;&gt;generate_series&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;200&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;hor&lt;/span&gt;(n), &lt;span class=&quot;syntax6&quot;&gt;generate_series&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;200&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ver&lt;/span&gt;(n);

&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INDEX&lt;/span&gt; idx_throwaway_grid_the_geom &lt;span class=&quot;syntax8&quot;&gt;ON&lt;/span&gt; throwaway_grid USING &lt;span class=&quot;syntax6&quot;&gt;gist&lt;/span&gt;(the_geom);
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;br /&gt;Step 4 - Create our final dataset - the towns nicely diced up into smaller rectangler shapes
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;TABLE&lt;/span&gt; towns_grid
(
  gid serial &lt;span class=&quot;syntax8&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;KEY&lt;/span&gt;,
  objectid &lt;span class=&quot;syntax8&quot;&gt;integer&lt;/span&gt;,
  town &lt;span class=&quot;syntax8&quot;&gt;character&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;varying&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;21&lt;/span&gt;),
  town_id &lt;span class=&quot;syntax8&quot;&gt;smallint&lt;/span&gt;,
  pop1980 &lt;span class=&quot;syntax8&quot;&gt;integer&lt;/span&gt;,
  pop1990 &lt;span class=&quot;syntax8&quot;&gt;integer&lt;/span&gt;,
  pop2000 &lt;span class=&quot;syntax8&quot;&gt;integer&lt;/span&gt;,
  popch80_90 &lt;span class=&quot;syntax8&quot;&gt;smallint&lt;/span&gt;,
  popch90_00 &lt;span class=&quot;syntax8&quot;&gt;integer&lt;/span&gt;,
  &lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;character&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;varying&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;2&lt;/span&gt;),
  fourcolor &lt;span class=&quot;syntax8&quot;&gt;smallint&lt;/span&gt;,
  fips_stco &lt;span class=&quot;syntax8&quot;&gt;integer&lt;/span&gt;,
  sum_acres &lt;span class=&quot;syntax8&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;precision&lt;/span&gt;,
  sum_square &lt;span class=&quot;syntax8&quot;&gt;double&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;precision&lt;/span&gt;
);

&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;AddGeometryColumn&lt;/span&gt;(&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;towns_grid&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;the_geom&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;26986&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;MULTIPOLYGON&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;2&lt;/span&gt;);

&lt;span class=&quot;syntax1&quot;&gt;--&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;Query&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;returned&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;successfully:&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;22713&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;rows&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;affected,&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;1273117&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;ms&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;execution&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;time.&lt;/span&gt;
&lt;span class=&quot;syntax8&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;towns_grid&lt;/span&gt;(objectid, town, town_id, pop1980, pop1990, pop2000, popch80_90, 
       popch90_00, &lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;, fourcolor, fips_stco, sum_acres, sum_square, 
       the_geom)
&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; objectid, town, town_id, 
    pop1980&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom), 
    pop1990&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom), 
    pop2000&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom), 
    popch80_90&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom),
       popch90_00&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom), &lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;, fourcolor, fips_stco, sum_acres&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom), 
    sum_square&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;ST_Area&lt;/span&gt;(t.the_geom), 
       &lt;span class=&quot;syntax6&quot;&gt;ST_multi&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_Intersection&lt;/span&gt;(t.the_geom, tg.the_geom))
  &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; towns t &lt;span class=&quot;syntax8&quot;&gt;INNER&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;JOIN&lt;/span&gt; throwaway_grid tg &lt;span class=&quot;syntax8&quot;&gt;ON&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_Intersects&lt;/span&gt;(t.the_geom, tg.the_geom);

&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INDEX&lt;/span&gt; idx_towns_grid_the_geom &lt;span class=&quot;syntax8&quot;&gt;ON&lt;/span&gt; towns_grid USING &lt;span class=&quot;syntax6&quot;&gt;gist&lt;/span&gt;(the_geom);
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;Before and After pictures&lt;/h2&gt;
&lt;table cellspacing=&quot;0&quot; cellpadding=&quot;1&quot; style=&quot;width: 600px;&quot;&gt;
	&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Massachusetts Town Boundary (towns) - Before - 351 records&lt;br /&gt;&lt;img border=&quot;0&quot; style=&quot;width: 50%; height: 50%;&quot; src=&quot;/images/blog_clips/matowns_before_diced.png&quot; alt=&quot;Massachusetts Town Boundaries&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;SELECT gid, the_geom &lt;br /&gt;FROM towns &lt;br /&gt;WHERE town = &#039;BOSTON&#039; -- 1 record&lt;br /&gt;&lt;img border=&quot;0&quot; src=&quot;/images/blog_clips/boston_before_diced.png&quot; alt=&quot;Boston Boundary&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;Massachusetts Extent Diced into Rectangles - 40,000 records&lt;br /&gt;&lt;img border=&quot;0&quot; style=&quot;width: 50%; height: 50%;&quot; src=&quot;/images/blog_clips/matowns_extent_diced.png&quot; alt=&quot;Massachusetts Extent Diced&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;Massachusetts Town (towns_grid) - After Dicing - 22,713 records&lt;br /&gt;&lt;img border=&quot;0&quot; style=&quot;width: 50%; height: 50%;&quot; src=&quot;/images/blog_clips/matowns_after_diced.png&quot; alt=&quot;Massachusetts Town Boundaries&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
	&lt;tr&gt;&lt;td&gt;SELECT gid, the_geom &lt;br /&gt;FROM towns_grid &lt;br /&gt;WHERE town = &#039;BOSTON&#039; -- 175 records&lt;br /&gt;&lt;img border=&quot;0&quot; src=&quot;/images/blog_clips/boston_after_diced.png&quot; alt=&quot;Boston Boundary&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;

 
    </content:encoded>

    <pubDate>Fri, 12 Oct 2007 00:13:21 -0400</pubDate>
    <guid isPermaLink="false">https://www.bostongis.com/blog/index.php?/archives/35-guid.html</guid>
    
</item>
<item>
    <title>More generate_series tricks</title>
    <link>https://www.bostongis.com/blog/index.php?/archives/33-More-generate_series-tricks.html</link>
            <category>generate_series</category>
            <category>postgis postgresql</category>
    
    <comments>https://www.bostongis.com/blog/index.php?/archives/33-More-generate_series-tricks.html#comments</comments>
    <wfw:comment>https://www.bostongis.com/blog/wfwcomment.php?cid=33</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>https://www.bostongis.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=33</wfw:commentRss>
    

    <author>nospam@example.com (Regina Obe)</author>
    <content:encoded>
    
&lt;h2&gt;PostGIS generate_series tricks&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;generate_series&lt;/b&gt; comes in particularly handy for manipulating geometries in a database.  The following examples are done using Postgis 1.3.1.  Below are some common use cases
&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax1&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*break&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;multipolygon&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;geometries&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;into&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;single&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;polygon&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;geometries&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;**&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*/&lt;/span&gt;        
&lt;span class=&quot;syntax8&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INTO&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;mypoly&lt;/span&gt;(the_geom)        
&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_GeometryN&lt;/span&gt;(the_geom, &lt;span class=&quot;syntax6&quot;&gt;generate_series&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;syntax6&quot;&gt;ST_NumGeometries&lt;/span&gt;(the_geom))) &lt;span class=&quot;syntax8&quot;&gt;AS&lt;/span&gt; poly 
    &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; mymultipoly
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax1&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*The&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;ST_ExteriorRing&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;only&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;takes&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;Polygons.&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;If&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;your&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;geometries&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;is&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;multipolygon&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;and&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;wanted&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;ST_ExteriorRing&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;exterior&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;line&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;polygon&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;polygon,&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;would&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;something&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;like&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;below.&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*/&lt;/span&gt;

 &lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; a.gid, ST_ExteriorRing(ST_GeometryN(a.the_geom,ST_NumGeometries(a.the_geom))) &lt;span class=&quot;syntax8&quot;&gt;AS&lt;/span&gt; a_singlelinenoholes
    &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; somegeomtable a
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax1&quot;&gt;/*&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;If&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;wanted&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;to&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;above&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;but&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;still&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;maintain&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;the&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;same&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;number&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;records&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;as&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;before,&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;would&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;do&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;which&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;would&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;give&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;you&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;a&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;multilinestring&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;geometry&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;where&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;linestring&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;represents&lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;an&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;exterior&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;of&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;polygon&lt;/span&gt;
&lt;span class=&quot;syntax1&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax1&quot;&gt;*/&lt;/span&gt;
 &lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; a.gid, ST_Collect(ST_ExteriorRing(ST_GeometryN(a.the_geom,ST_NumGeometries(a.the_geom)))) &lt;span class=&quot;syntax8&quot;&gt;AS&lt;/span&gt; a_multilinesnoholes
    &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; somegeomtable a
    &lt;span class=&quot;syntax8&quot;&gt;GROUP&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;BY&lt;/span&gt; a.gid

&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;br /&gt;&lt;br /&gt;NOTE: Because of the way generate_series works we can&#039;t have 2 generate series calls in the SELECT.
	So if we need an inner and outer loop then we put one in the SELECT and one in the FROM and have a limiting WHERE clause as shown in the below. &lt;br /&gt;&lt;br /&gt;  
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax1&quot;&gt;/**Get all interior linestring rings (holes) of a multipolygon into a separate table 
with one record per interior ring. **/&lt;/span&gt;
 &lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_BuildArea&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_InteriorRingN&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_GeometryN&lt;/span&gt;(a.the_geom,gn.n),&lt;span class=&quot;syntax6&quot;&gt;generate_series&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;syntax6&quot;&gt;ST_NumInteriorRings&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_GeometryN&lt;/span&gt;(a.the_geom,gn.n))) )) &lt;span class=&quot;syntax8&quot;&gt;AS&lt;/span&gt; a_hole 
    &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; somegeomtable a, 
            &lt;span class=&quot;syntax6&quot;&gt;generate_series&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;, (&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;Max&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_NumGeometries&lt;/span&gt;(the_geom)) &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; somegeomtable)) &lt;span class=&quot;syntax6&quot;&gt;gn&lt;/span&gt;(n)
    &lt;span class=&quot;syntax8&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_NumGeometries&lt;/span&gt;(the_geom) &lt;span class=&quot;syntax18&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;=&lt;/span&gt; gn.n  &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;ST_NumInteriorRings&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;ST_GeometryN&lt;/span&gt;(the_geom,gn.n)) &lt;span class=&quot;syntax18&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;syntax5&quot;&gt;0&lt;/span&gt;
&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;To a Database programmer all problems look like database problems&lt;/h2&gt;
&lt;p&gt;Doing a lot of database programming warps your thinking.  Normally I would consider thinking in the languages you program in to be a bad thing because to some 
extent it limits your thinking to what is supported in said language. In general I think doing a lot of database programming has had positive effects on me. 
I find myself thinking about problems in parallel, unencumbered by the optical illusions of step dependency, and instead grouping problems in sets.  
&lt;/p&gt;
&lt;p&gt;It seems that regardless of what language I program in, I see sets and patterns
everywhere. When that happens I can&#039;t help but hit that particular nail with a database hammer.
&lt;/p&gt;
&lt;p&gt;Below is a PostgreSQL example that uses generate_series to generate ASP.NET gridview column markup for a month column cross tab.  Originally I used
AutogenerateColumns=true property of a grid view, but I needed to manipulate the formatting of my columns so that was a bit less than satisfying.
&lt;/p&gt;

&lt;p&gt;The code below generates a markup record for each grid view month column&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;lt;asp:BoundField&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;DataField=&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;trim&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;to_char&lt;/span&gt;(date &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; (n &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;)&lt;span class=&quot;syntax18&quot;&gt;::&lt;/span&gt;interval, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;)) 
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;HeaderText=&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;trim&lt;/span&gt;(&lt;span class=&quot;syntax6&quot;&gt;to_char&lt;/span&gt;(date &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; (n &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;)&lt;span class=&quot;syntax18&quot;&gt;::&lt;/span&gt;interval, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Mon&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;)) 
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;ItemStyle-HorizontalAlign=&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;  &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; newval
        &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;syntax6&quot;&gt;generate_series&lt;/span&gt;(&lt;span class=&quot;syntax5&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;11&lt;/span&gt;) n
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you were to change the code above to add a SUM aggregate function on strings - (&lt;a href=&quot;http://www.commandprompt.com/ppbook/r23733&quot; target=&quot;_blank&quot;&gt;definition of a PostgreSQL SUM aggregate for text you can find here&lt;/a&gt;)
you would get just one row with all your markup. For this particular one we also created a column that returns the corresponding SQL for the cross tab query.&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;lt;asp:GridView&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;id=&amp;quot;grv&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;runat=&amp;quot;server&amp;quot;&amp;gt;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; E&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;lt;asp:BoundField&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;DataField=&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; mth&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;long_mname 
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;HeaderText=&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; mth&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;short_mname 
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;ItemStyle-HorizontalAlign=&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; E&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;lt;/asp:GridView&amp;gt;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; aspxmarkup, 
&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;SELECT&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; 
    &lt;span class=&quot;syntax8&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;SUM(CASE&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;WHEN&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;report_date&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;BETWEEN&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;mth.start_date&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;\&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;AND&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;
&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;mth.end_date&lt;/span&gt;
&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;\&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;THEN&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;amount&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;ELSE&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;NULL&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;END)&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;As&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; 
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; mth&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;long_mname
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;  E&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;SUM(amount)&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;As&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;total&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; E&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\r\n&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; 
    &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;FROM&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;sometable&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;WHERE&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;report_date&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;between&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;2007&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;01&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;01&lt;/span&gt;\&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;AND&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;2007&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;12&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;31&lt;/span&gt;\&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;as&lt;/span&gt; sqlcrosstab
  &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; 
        &lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;n &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; mnum, 
            trim&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;to_char&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax8&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;n &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;::interval, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Mon&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; short_mname,
            trim&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;to_char&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax8&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;n &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;::interval, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; long_mname,
            &lt;span class=&quot;syntax8&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;n &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;::interval &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; start_date,
            &lt;span class=&quot;syntax8&quot;&gt;date&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;n &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;month&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;::interval &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt;  &lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;day&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;::interval &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; end_date      
         &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; generate_series&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;0&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; n&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; mth
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;The gridview markup output of the aspxmarkup column looks like this&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;GridView&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;grv&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;runat&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;server&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;January&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Jan&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;February&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Feb&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;March&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Mar&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;April&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Apr&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;May&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;June&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Jun&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;July&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Jul&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;August&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Aug&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;September&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Sep&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;October&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Oct&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;November&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Nov&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;BoundField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;DataField&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;December&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HeaderText&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Dec&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;ItemStyle&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;HorizontalAlign&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;Center&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;syntax17&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;asp:&lt;/span&gt;&lt;span class=&quot;syntax6&quot;&gt;GridView&lt;/span&gt;&lt;span class=&quot;syntax17&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;And the Sql output of the sqlcrosstab column looks like this&lt;/p&gt;
&lt;div class=&quot;code&quot;&gt;
	&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; January, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-02-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-02-28&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; February, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-03-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-03-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; March, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-04-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-04-30&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; April, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-05-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-05-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; May, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-06-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-06-30&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; June, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-07-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-07-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; July, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-08-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-08-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; August, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-09-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-09-30&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; September, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-10-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-10-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; October, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-11-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-11-30&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; November, 
&lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax9&quot;&gt;CASE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;WHEN&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-12-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-12-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt; &lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;00:00:00&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;THEN&lt;/span&gt; amount &lt;span class=&quot;syntax8&quot;&gt;ELSE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;END&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; December, 
 &lt;span class=&quot;syntax9&quot;&gt;SUM&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;amount&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; total 
 &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; sometable &lt;span class=&quot;syntax8&quot;&gt;WHERE&lt;/span&gt; report_date &lt;span class=&quot;syntax8&quot;&gt;between&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-01-01&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;2007-12-31&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;
&lt;/span&gt;&lt;/pre&gt;
	
&lt;/div&gt; 
    </content:encoded>

    <pubDate>Tue, 02 Oct 2007 18:09:00 -0400</pubDate>
    <guid isPermaLink="false">https://www.bostongis.com/blog/index.php?/archives/33-guid.html</guid>
    
</item>
<item>
    <title>Using generate_series to Generate Test Spatial Data</title>
    <link>https://www.bostongis.com/blog/index.php?/archives/28-Using-generate_series-to-Generate-Test-Spatial-Data.html</link>
            <category>generate_series</category>
            <category>postgis postgresql</category>
    
    <comments>https://www.bostongis.com/blog/index.php?/archives/28-Using-generate_series-to-Generate-Test-Spatial-Data.html#comments</comments>
    <wfw:comment>https://www.bostongis.com/blog/wfwcomment.php?cid=28</wfw:comment>

    <slash:comments>10</slash:comments>
    <wfw:commentRss>https://www.bostongis.com/blog/rss.php?version=2.0&amp;type=comments&amp;cid=28</wfw:commentRss>
    

    <author>nospam@example.com (Regina Obe)</author>
    <content:encoded>
    
&lt;p&gt;One of my favorite functions in PostgreSQL is the &lt;i&gt;&lt;b&gt;generate_series(x,y) &lt;/b&gt;&lt;/i&gt;function.  What this little function does is to generate a &lt;br /&gt;set of numbers from x to y. &lt;/p&gt;&lt;p&gt;Being able to generate a sequence of numbers has so many uses that its really hard to itemize them all.&lt;/p&gt;&lt;p&gt;For this particular entry I thought I would share a particular use of it in generating test data.&lt;br /&gt;&lt;br /&gt;Often times you need to generate data for various test cases or you need to generate a lot of data to test out your speed of queries and&lt;br /&gt;for benchmarking.    Below is a quick query that uses some postgis functions, &lt;em&gt;generate_series&lt;/em&gt;, and the PostgreSQL &lt;em&gt;random()&lt;/em&gt; function to create a test table, and populate it with 500 random circles around Boston.  Each circle being of various sizes. &lt;/p&gt;&lt;p&gt; This is in longlat projection.&lt;/p&gt;&lt;div class=&quot;code&quot;&gt;&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;TABLE&lt;/span&gt; testcase(gid serial &lt;span class=&quot;syntax8&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;key&lt;/span&gt;);&lt;br /&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; AddGeometryColumn(&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;testcase&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;the_geom&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;4326&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;POLYGON&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;2&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;syntax8&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INTO&lt;/span&gt; testcase(the_geom)&lt;br /&gt;    &lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; buffer(setsrid(makepoint(&lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;71&lt;/span&gt;.&lt;span class=&quot;syntax5&quot;&gt;0891380310059&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;random()&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;500&lt;/span&gt;.&lt;span class=&quot;syntax5&quot;&gt;00&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;42&lt;/span&gt;.&lt;span class=&quot;syntax5&quot;&gt;3123226165771&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;random()&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;500&lt;/span&gt;.&lt;span class=&quot;syntax5&quot;&gt;00&lt;/span&gt;),&lt;span class=&quot;syntax5&quot;&gt;4326&lt;/span&gt;), n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;0&lt;/span&gt;.&lt;span class=&quot;syntax5&quot;&gt;0001&lt;/span&gt;)&lt;br /&gt;        &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; generate_series(&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;500&lt;/span&gt;) &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; n;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INDEX&lt;/span&gt; idx_testcase_the_geom  &lt;span class=&quot;syntax8&quot;&gt;ON&lt;/span&gt; testcase &lt;span class=&quot;syntax8&quot;&gt;USING&lt;/span&gt; gist(the_geom);&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;If you wanted to store the data in a different projection - you would do something like this instead.  The below example will generate data in MA NAD 83 feet and create circles of radius in increments of 100 feet &lt;/p&gt;&lt;br /&gt;
&lt;div class=&quot;code&quot;&gt;
&lt;code&gt;
&lt;/code&gt;&lt;pre&gt;&lt;span class=&quot;syntax0&quot;&gt;&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;TABLE&lt;/span&gt; testcase&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;gid serial &lt;span class=&quot;syntax8&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; AddGeometryColumn&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;public&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;testcase&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;the_geom&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;2249&lt;/span&gt;, &lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;POLYGON&lt;/span&gt;&lt;span class=&quot;syntax13&quot;&gt;&#039;&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;syntax8&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INTO&lt;/span&gt; testcase&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;the_geom&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;syntax8&quot;&gt;SELECT&lt;/span&gt; buffer&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;transform&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;setsrid&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;makepoint&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;71&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;0891380310059&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;random&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;00&lt;/span&gt;, &lt;span class=&quot;syntax5&quot;&gt;42&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;3123226165771&lt;/span&gt; &lt;span class=&quot;syntax18&quot;&gt;+&lt;/span&gt; n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;random&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;00&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;4326&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;2249&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;, n&lt;span class=&quot;syntax18&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;100&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;syntax8&quot;&gt;FROM&lt;/span&gt; generate_series&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;syntax5&quot;&gt;1&lt;/span&gt;,&lt;span class=&quot;syntax5&quot;&gt;500&lt;/span&gt;&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;As&lt;/span&gt; n;&lt;br /&gt;&lt;br /&gt;&lt;span class=&quot;syntax8&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;syntax8&quot;&gt;INDEX&lt;/span&gt; idx_testcase_the_geom  &lt;span class=&quot;syntax8&quot;&gt;ON&lt;/span&gt; testcase &lt;span class=&quot;syntax8&quot;&gt;USING&lt;/span&gt; gist&lt;span class=&quot;syntax18&quot;&gt;(&lt;/span&gt;the_geom&lt;span class=&quot;syntax18&quot;&gt;)&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Note, it is possible to create elaborate spatial data using generate_series and additional functions like trigonometric functions and other postgis functions to generate more intricate patterns of spatial data fitting certain criteria.&lt;/p&gt;
&lt;p&gt;In other databases that lack this functionality I either create it if the database is powerful enough to support set returning functions, or I resort to creating a dummy table that has nothing but numbers in it.  The technique comes in especially handy when you need to create something like a sequence of dates.&lt;/p&gt; 
    </content:encoded>

    <pubDate>Sat, 15 Sep 2007 22:50:00 -0400</pubDate>
    <guid isPermaLink="false">https://www.bostongis.com/blog/index.php?/archives/28-guid.html</guid>
    
</item>

</channel>
</rss>
