<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Sam Lester - SQL Server</title><subtitle type="html" /><id>http://blogs.msdn.com/b/samlester/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/samlester/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2012-08-28T12:11:00Z</updated><entry><title>Language Translation in SQL Server using Bing Translator APIs &amp; SQL CLR</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2013/05/04/language-translation-in-sql-server-using-bing-translator-apis-amp-sql-clr.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2013/05/04/language-translation-in-sql-server-using-bing-translator-apis-amp-sql-clr.aspx</id><published>2013-05-04T11:08:36Z</published><updated>2013-05-04T11:08:36Z</updated><content type="html">&lt;h2&gt;Language Translation within SQL Server&amp;nbsp;using Bing Translator public APIs and CLR Stored Procedures / Functions&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Does SQL Server have a built-in way to&amp;nbsp;translate&amp;nbsp;my text data from English to Spanish, German to French, Italian to Russian?&amp;nbsp;&amp;nbsp;The answer is no, SQL Server does not have this functionality built-in, but it is indeed possible to build by leveraging CLR and the public Bing Translator APIs.&amp;nbsp; All C# and SQL Server code has been uploaded as a TechNet Gallery&amp;nbsp;&lt;a title="here" href="http://gallery.technet.microsoft.com/Language-Translation-e3898f0a"&gt;here&lt;/a&gt;&amp;nbsp;to make it easier to implement.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I've heard this question a surprising number of times over the past few years&amp;nbsp;and finally had the business need to build it myself.&amp;nbsp; I'm working with a database that is hosted in another country and at one point allowed free text entry into a product description column.&amp;nbsp; While the majority of the descriptions are in English, a somewhat substantial amount were entered in the native language.&amp;nbsp; It is time to clean up this database to arrive at the definitive list of product descriptions, but in order to do so, we need to first translate the native language entries into English.&amp;nbsp; Using the code samples from the TechNet Gallery found&amp;nbsp;&lt;a title="here" href="http://gallery.technet.microsoft.com/Language-Translation-e3898f0a"&gt;here&lt;/a&gt;, we can perform language translation as shown below.&lt;/p&gt;
&lt;p&gt;Sample call within SQL Server to translate nvarchar&amp;nbsp;text data within a table using the supplied user-defined function:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/1122.UDF_2D00_EnglishToGerman.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/1122.UDF_2D00_EnglishToGerman.png" alt="" width="552" height="168" border="0" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Sample call within SQL Server showing the flexibility of the stored procedure translating between several different languages:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/2744.SP_2D00_Examples.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/2744.SP_2D00_Examples.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since the Bing Translator provides a free public API that can be leveraged by developers, the process to build this application is fairly straightforward.&amp;nbsp; As of April 2013, the process to access these APIs has changed so that you must register for a public access token to obtain your personal "client secret".&amp;nbsp; This is used to obtain a token that is then passed along with the API call to validate the user and supply the requested translation.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The three steps required to obtain the access&amp;nbsp;token are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sign up for Bing Translator API: - &lt;a href="https://datamarket.azure.com/dataset/bing/microsofttranslator"&gt;https://datamarket.azure.com/dataset/bing/microsofttranslator&lt;/a&gt;&amp;nbsp; (Scroll to the bottom to find the free registration that allows 2 million characters translated per month)&lt;/li&gt;
&lt;li&gt;Register the application: - &lt;a href="https://datamarket.azure.com/developer/applications/"&gt;https://datamarket.azure.com/developer/applications/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Obtaining an Access Token: - &lt;a href="http://msdn.microsoft.com/en-us/library/hh454950.aspx"&gt;http://msdn.microsoft.com/en-us/library/hh454950.aspx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you obtain the clientID and clientSecret, you&amp;nbsp;will replace the sample values in the C# application and&amp;nbsp;are ready to compile.&lt;/p&gt;
&lt;p&gt;Detailed steps to use the project:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download and extract the .zipped C# source code and SQL Server found &lt;a title="here" href="http://gallery.technet.microsoft.com/Language-Translation-e3898f0a"&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Open the C# application, replace ClientID and ClientSecret (lines 69-70) with the values obtained in the steps above, and compile the C# application&lt;/li&gt;
&lt;li&gt;From&amp;nbsp;the extracted SQL Server scripts folder, open CreateAssemblyCode.sql within your instance of SQL Server, update the script with the path to your compiled DLL from step #2 and run the script to create the assembly&lt;/li&gt;
&lt;li&gt;From&amp;nbsp;the extracted SQL Server scripts folder, open the spCallTranslator and udfCallTranslator for the source code to create the SP and UDF.&amp;nbsp; The SP script also contains a few samples.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Enjoy!&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10416072" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="Bing Translator" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Bing+Translator/" /><category term="C#" scheme="http://blogs.msdn.com/b/samlester/archive/tags/C_2300_/" /></entry><entry><title>Bulk Database Migration from On-Premise SQL Server to SQL Azure - Step 1: Bulk .bacpac Export </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/12/08/bulk-migration-from-on-premise-sql-server-to-sql-azure-step-1-performing-bulk-bacpac-export-through-tsql-scripting-amp-sqlpackage-exe.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/12/08/bulk-migration-from-on-premise-sql-server-to-sql-azure-step-1-performing-bulk-bacpac-export-through-tsql-scripting-amp-sqlpackage-exe.aspx</id><published>2012-12-08T17:30:00Z</published><updated>2012-12-08T17:30:00Z</updated><content type="html">&lt;p&gt;I recently had a task to perform a bulk migration of hundreds of databases&amp;nbsp;to Windows Azure SQL Database (formerly known as SQL Azure) from an instance of SQL Server 2012.&amp;nbsp; If you need to migrate a very small number of databases, the easiest way is likely through the SSMS export Data-Tier Application wizard.&amp;nbsp; You can manually create a .bacpac file for each of the databases and move them to your blob storage.&amp;nbsp; However, for&amp;nbsp;hundreds of&amp;nbsp;databases, this is not a nice solution.&amp;nbsp; There are several ways to automate this task, but I decided to use TSQL scripting to build up the correct SQLPackage.exe command line call, then use xp_cmdshell to execute.&amp;nbsp; Similarly, the script below can be modified to generate the appropriate command line syntax and be executed outside of SQL Server if needed since most SQL Server environments have xp_cmdshell disabled.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;There are several different techniques for migrating an on-premise SQL Server database to SQL Database.&amp;nbsp; My current technical preference is to "export" the database using Data-Tier Application functionality to create a self-contained .bacpac file (NOTE: .bacpac, not .dacpac) that can then be uploaded to blob storage and imported directly into your SQL Database environment.&amp;nbsp; One benefit of using .bacpac export is that the process includes a validation step to verify that all objects in your on-premise database will be supported in SQL Database.&amp;nbsp; Other techniques (scripting, Import/Export wizard, extracting .dacpacs, etc) do not perform this verification during the extraction phase and will result in a failed database creation in the SQL Database environment if you have unsupported objects (ex:&amp;nbsp; a table without a clustered index).&amp;nbsp; These other techniques give different benefits, such as the flexibility to manually modify scripts, etc., but for ease of use, I'm currently sticking with .bacpac export.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Task:&amp;nbsp; Bulk Migration from On-Premise SQL Server to SQL Database - Step 1:&amp;nbsp; Performing Bulk .bacpac Export through TSQL Scripting &amp;amp; SQLPackage.exe&lt;/strong&gt;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;Purpose:&amp;nbsp;&amp;nbsp;This script performs bacpac export for all databases in a given server.&amp;nbsp;&amp;nbsp;If the database contains objects fully supported in &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;SQL Database / SQL Azure, then the bacpac export will succeed.&amp;nbsp;&amp;nbsp;If not, the errors/reasons for failure will be displayed in the result set.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;After running the script, save the output to text to help determine what objects need to be modified in order for each DB to be ready to migrate.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;Author:&amp;nbsp;&amp;nbsp;Sam Lester (MSFT)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;Create Date:&amp;nbsp;&amp;nbsp;12/1/12&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;Sample Call for bacpac export&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;sqlpackage.exe /Action:Export /SourceServerName:. /sdn:"DB_Foo" /tf:"c:\MyBacpacs\DB_Foo.bacpac"&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;/* Create table to hold DB names to process */&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; &lt;span style="color: #008080;"&gt;files&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;files&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;max&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;filename&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1000&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;cmd&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;max&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1000&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;null)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@filepath&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1000&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;@dircmd&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1000&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;@sqlpackagepath&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;@filepath&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'c:\MyBacpacs\'&lt;/span&gt;&lt;span style="color: #008000;"&gt;/* path to export .bacpacs --&amp;nbsp;&amp;nbsp;Create this directory before running */&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;@sqlpackagepath&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe'&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;-- Update this to the correct location for your DacFramework.msi install&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Store the list of databases that we want to export.&amp;nbsp;&amp;nbsp;If you want a particular subset, add a WHERE clause to filter this list.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;files&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;name&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008000;"&gt;sys&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;databases&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #008080;"&gt;database_id&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; 4&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;--Skip the system DBs&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;/* Build the command line string that we'll later execute in the WHILE loop.&amp;nbsp;&amp;nbsp;In this example, the instance name is hardcoded &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;to the default instance (using . in /ssn:.).&amp;nbsp;&amp;nbsp;If you have a named instance, update this string to "/ssn:ServerName\InstanceName"&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;files&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' /Action:Export /sdn:'&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;files&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;' /ssn:. /tf:'&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@filepath&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;files&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'.bacpac'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;files&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@limit&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@rc&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;count&lt;/span&gt;&lt;span style="color: #808080;"&gt;(*)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008080;"&gt;@limit&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Loop through and execute each command line to perform the export&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;WHILE &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@limit&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@txt&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;@txt&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'cmd /c ""'&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@sqlpackagepath&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'"" '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;top&lt;/span&gt; 1 &lt;span style="color: #008080;"&gt;cmd&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' &amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;'&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@filepath&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'results_bacpac_export.txt'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'----------------------------------------'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;top&lt;/span&gt; 1 &lt;span style="color: #008080;"&gt;cmd&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'----------------------------------------'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;exec&lt;/span&gt; &lt;span style="color: #008080;"&gt;@rc&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;master&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;dbo&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #800000;"&gt;xp_cmdshell&lt;/span&gt;&lt;span style="color: #008080;"&gt;@txt&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;if &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ISNULL&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@rc&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;0&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'--- SUCCESSFUL EXPORT FOR DATABASE = '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;top&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;filename&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;delete&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;top &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;publish&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;@limit&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@limit&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;output&lt;/span&gt; &lt;span style="color: #808080;"&gt;is&lt;/span&gt; &lt;span style="color: #808080;"&gt;not&lt;/span&gt; &lt;span style="color: #808080;"&gt;null&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;/* Cleanup&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;drop table files&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;drop table publish&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;drop table output&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The result of running the script is the following:&lt;/p&gt;
&lt;p&gt;1.&amp;nbsp; For databases that can be successfully migrated to SQL Database, a .bacpac file is created in the file location supplied in the script.&amp;nbsp; These can then be moved to blob storage and imported.&amp;nbsp; &lt;br /&gt;2.&amp;nbsp; For databases that cannot be successfully migrated to SQL Database, the output of the script provides the list of unsupported objects.&amp;nbsp; Save this&amp;nbsp;output to text to help assess your&amp;nbsp;migration strategy.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ex:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/6747.Results.png"&gt;&lt;img src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/6747.Results.png" alt="" width="921" height="368" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hope this helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Standard disclaimer:&amp;nbsp; As with any script/code, please run this in a test server to make sure it works for your specific version/edition/environment settings before tinkering in your production environment.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10375791" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Scripting" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Scripting/" /><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="SQL Azure" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Azure/" /><category term="SQL Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Database/" /><category term="Windows Azure SQL Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Windows+Azure+SQL+Database/" /></entry><entry><title>Creating Complex Test Databases - Generating One Table for each of the 2,397 supported Collations</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/12/02/creating-complex-test-databases-generating-one-table-for-each-of-the-2-397-supported-collations.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/12/02/creating-complex-test-databases-generating-one-table-for-each-of-the-2-397-supported-collations.aspx</id><published>2012-12-03T01:55:00Z</published><updated>2012-12-03T01:55:00Z</updated><content type="html">&lt;p&gt;&lt;span style="font-size: small;"&gt;As a follow up to my series on &lt;a title="complex test databases" href="http://blogs.msdn.com/b/samlester/archive/2012/08/02/creating-complex-test-databases-intro.aspx"&gt;complex test databases&lt;/a&gt;, this article will cover&amp;nbsp;one of the more interesting&amp;nbsp;test databases that I recently created.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Goal&lt;/strong&gt;:&amp;nbsp; &lt;strong&gt;Create a database that includes one table for each supported collation.&amp;nbsp; Each table contains a single column with the various column level collations supported by SQL Server 2012 (nearly 2,400 different collations supported).&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The first step here is to determine where we can find the exhaustive&amp;nbsp;list of supported collations.&amp;nbsp; The answer comes from the built-in table-valued function, &lt;strong&gt;fn_helpcollations&lt;/strong&gt;,&amp;nbsp;that returns the list of supported collations in SQL Server 2012.&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: small;"&gt;Once we have the exhaustive list of supported collations, we need to determine how we will leverage this list to create one table for each collation.&amp;nbsp; If we were to do this manually, we would write out the following CREATE TABLE statements:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;create&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;table&lt;/span&gt; &lt;span style="color: teal;"&gt;T1&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: teal;"&gt;c1&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;collate&lt;/span&gt; &lt;span style="color: teal;"&gt;Albanian_100_BIN&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;create&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;table&lt;/span&gt; &lt;span style="color: teal;"&gt;T2&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: teal;"&gt;c1&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;collate&lt;/span&gt; &lt;span style="color: teal;"&gt;Albanian_100_BIN2&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;create&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;table&lt;/span&gt; &lt;span style="color: teal;"&gt;T3&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: teal;"&gt;c1&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;collate&lt;/span&gt; &lt;span style="color: teal;"&gt;Albanian_100_CI_AI&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: red;"&gt;&amp;hellip;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;create&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;table&lt;/span&gt; &lt;span style="color: teal;"&gt;T2395&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: teal;"&gt;c1&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;collate&lt;/span&gt; &lt;span style="color: teal;"&gt;Yakut_100_CS_AS_KS&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;create&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;table&lt;/span&gt; &lt;span style="color: teal;"&gt;T2396&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: teal;"&gt;c1&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;collate&lt;/span&gt; &lt;span style="color: teal;"&gt;Yakut_100_CS_AS_KS_WS&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: .0001pt; line-height: normal; mso-layout-grid-align: none; text-autospace: none;"&gt;&lt;span class="GramE"&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas; color: blue;"&gt;create&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 9.5pt; font-family: Consolas;"&gt; &lt;span style="color: blue;"&gt;table&lt;/span&gt; &lt;span style="color: teal;"&gt;T2397&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: teal;"&gt;c1&lt;/span&gt; &lt;span class="SpellE"&gt;&lt;span style="color: blue;"&gt;nvarchar&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;50&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;collate&lt;/span&gt; &lt;span style="color: teal;"&gt;Yakut_100_CS_AS_WS&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The repetition of these statements makes them good candidates for scripting using T-SQL.&amp;nbsp; By leveraging the ROW_NUMBER function as the table numeric identifier, we're able to put together the following statement:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="margin: 0px;"&gt;&lt;span style="font-family: Calibri,sans-serif; font-size: small;"&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="font-family: Consolas; color: #ff0000;"&gt;'create table T'&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;+&lt;/span&gt;&lt;span style="font-family: Consolas; color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;(&lt;/span&gt;&lt;span style="font-family: Consolas; color: #ff00ff;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;()&lt;/span&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;over &lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;(&lt;/span&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;order&lt;/span&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;by&lt;/span&gt;&lt;span style="font-family: Consolas; color: #008080;"&gt;name&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;)&lt;/span&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;(&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;10&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;))&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;+&lt;/span&gt;&lt;span style="font-family: Consolas; color: #ff0000;"&gt;'(c1 nvarchar(50) collate '&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;+&lt;/span&gt;&lt;span style="font-family: Consolas; color: #008080;"&gt;name&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;+&lt;/span&gt;&lt;span style="font-family: Consolas; color: #ff0000;"&gt;')'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin: 0px;"&gt;&lt;span style="font-family: Calibri,sans-serif; font-size: small;"&gt;&lt;span style="font-family: Consolas; color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;::&lt;/span&gt;&lt;span style="font-family: Consolas; color: #008000;"&gt;fn_helpcollations&lt;/span&gt;&lt;span style="font-family: Consolas; color: #808080;"&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="margin: 0px;"&gt;&amp;nbsp;&lt;/div&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;The output of this statement is exactly the 2,397 CREATE TABLE&amp;nbsp;scripts needed to create our database.&amp;nbsp; Copy the results and run them in an empty DB to create our desired database.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;By leveraging the same&amp;nbsp;language constructs, we could also create different flavors of this same DB.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;Example 1:&amp;nbsp; 1&amp;nbsp;table with 1024 columns of different collations&amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Example 2:&amp;nbsp; Modify the script to produce one CREATE DATABASE script for each collation&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hope you enjoy,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10373890" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="Scripting" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Scripting/" /><category term="Testing" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Testing/" /><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="Collations" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Collations/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="SQL Server 2005" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2005/" /></entry><entry><title>TSQL - Solve it YOUR Way - Finding a Person's Current Age Based on Birth Date</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/11/30/tsql-solve-it-your-way-finding-an-employee-s-current-age-based-on-birth-date.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/11/30/tsql-solve-it-your-way-finding-an-employee-s-current-age-based-on-birth-date.aspx</id><published>2012-12-01T00:56:00Z</published><updated>2012-12-01T00:56:00Z</updated><content type="html">&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;As part of the blog series &lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL - Solve it YOUR Way&lt;/a&gt;, today's topic will cover a question asked recently in the T-SQL&amp;nbsp;MSDN forums where the solution, at first, seems&amp;nbsp;extremely obvious.&amp;nbsp; However, as&amp;nbsp;solutions were proposed and flaws were discovered with the proposals, the interesting nature of the problem was revealed.&amp;nbsp; As is the theme of the blog series, different solutions and explanations are provided from&amp;nbsp;some of the most helpful and creative contributors in the TSQL MSDN forums.&amp;nbsp;&amp;nbsp;This week, the contributors&amp;nbsp;are Steven Wang, Olaf Helper, Tom Cooper, and Monica Rivera.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: large;"&gt;&lt;strong&gt;Topic:&amp;nbsp; Determine the age of a person&amp;nbsp;given their birth date.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;A fun aspect to this question is the fact that we've all probably made these calculations hundreds of times in our minds throughout our lives as we hear birth dates in conversation so often.&amp;nbsp; The result is that it seems that the calculation should be so simple.&amp;nbsp; However, since SQL Server does not have an AGE() function that takes a datetime parameter and returns an age, we'll need to handle the logic and calculate it ourselves.&amp;nbsp; You can then store the result as a function in your SQL Server DBA/DB Developer toolbox and have the solution forever.&amp;nbsp; Three of the below solutions are somewhat similar using some variation of DATEFIFF(), but vary slightly in interesting ways, while one (Steven Wang's solution) takes on a completely new and interesting approach.&amp;nbsp; This is an outstanding example of why I've enjoyed collaborating with other SQL Server professional on this series to highlight different methods and solutions to&amp;nbsp;a single&amp;nbsp;problem.&amp;nbsp; The solutions show the true power of SQL Server as a programming language and also highlight the freedom that we as DBA's, DB developers, BI experts, etc. have in creating our solutions.&amp;nbsp; I hope you enjoy the solutions as much as I have.&lt;/p&gt;
&lt;h4&gt;Solution #1 - Provided by Olaf Helper&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@reportDate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;datetime&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008080;"&gt;@reportDate&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;date&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;getdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;());&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;birthdates&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Peter'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; {&lt;span style="color: #008080;"&gt;d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N'1970-09-14'}&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Bob'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; {&lt;span style="color: #008080;"&gt;d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N'1970-11-27'}&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Sabina'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; {&lt;span style="color: #008080;"&gt;d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N'1970-11-28'}&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Amy'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; {&lt;span style="color: #008080;"&gt;d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N'1970-11-29'}&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Jane'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;{&lt;span style="color: #008080;"&gt;d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N'1970-12-31'}&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Julie'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; {&lt;span style="color: #008080;"&gt;d&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N'1971-12-31'}&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;age&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@reportDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Age&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;DATEADD&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@reportDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;SwitchDate&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;birthdates&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;age&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Name&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;age&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #008080;"&gt;SwitchDate&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@reportDate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color: #008080;"&gt;age&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #008080;"&gt;age&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;END&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Age&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #008080;"&gt;SwitchDate&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@reportDate&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Happy Birthday!!!'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;END&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Gratulation&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;age&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;age&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Birthdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Olaf's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The CTE "birthdates" creates sample data around the current date for reporting, plus some additional data to check the result.&lt;/p&gt;
&lt;p&gt;The DateDiff with option "YEAR" function seems the first and obvious way to calculate the age, but it returns only the difference of the year part and doesn't account for the additional months.&lt;br /&gt;For example:&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;SELECT DATEDIFF(YEAR, {d N'2000-01-01'}, {d N'2001-01-01'})&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,DATEDIFF(YEAR, {d N'2000-01-01'}, {d N'2001-12-31'})&lt;/p&gt;
&lt;p&gt;This returns 1 for both results, even though in the second example, the difference is "nearly" 2 years.&lt;/p&gt;
&lt;p&gt;To solve this I still use the DateDiff function, then add the difference between the birth and the given date to the birthdate. In a CASE WHEN statement I compare the result with the given date and if it's higher, I subtract 1 to get the real age.&lt;/p&gt;
&lt;h4&gt;Solution #2 - Provided by Tom Cooper&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;EmpName&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;40&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;date&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;EmpName&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Values&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'30 Yrs old yesterday'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateAdd&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;day&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateAdd&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;30&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;GetDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;()))),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'30 Yrs old today'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateAdd&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;30&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;GetDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;())),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'30 Yrs old tomorrow'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateAdd&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;day&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateAdd&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;30&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;GetDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;())));&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;With&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;EmpName&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateDiff&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;GetDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;())&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;ProvisionalAge&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;EmpName&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ProvisionalAge&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Case&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;When&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DateAdd&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;year&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ProvisionalAge&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;GetDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Then&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;Else&lt;/span&gt; 0 &lt;span style="color: #0000ff;"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;Age&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Tom's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This uses the fact that when you do a DATEDIFF() in years between birth date and the current date, the number you get is either the correct age or one year too large depending on whether or not the person has had a birthday in this year.&amp;nbsp; That can be determined by adding that number of years to the birth date and checking to see if you get a date greater than today.&amp;nbsp; If so, subtract 1.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Solution #3 - Provided by Monica Rivera&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;USE&lt;/span&gt; &lt;span style="color: #008080;"&gt;AdventureWorks&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;LoginID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;CASE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;WHEN&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DATEADD&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;YY&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;yy&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: #808080;"&gt;()),&lt;/span&gt;&lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&amp;lt;&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;THEN&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;yy&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: #808080;"&gt;())&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;yy&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: #808080;"&gt;())-&lt;/span&gt;1 &lt;span style="color: #0000ff;"&gt;END&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;AGE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;HumanResources&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Employee&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;BirthDate&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Monica's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There are two cases when calculating a person&amp;rsquo;s age:&lt;br /&gt; &lt;br /&gt;1. &amp;nbsp;The birth date has already happened in the current year: the age is simply the current year minus the year of birth.&lt;br /&gt;2. &amp;nbsp;The birth date has not yet happened in the current year: the age is equal to the current year minus the year of birth minus one.&lt;br /&gt; &lt;br /&gt;A simple T-SQL expression to determine if the birth date has already happened in the current year is the following:&lt;br /&gt; &lt;br /&gt;DATEADD(YY,DATEDIFF(yy,BirthDate,GETDATE()),BirthDate)&amp;lt;GETDATE() &lt;br /&gt; &lt;br /&gt;This adds to the birth date the difference in years between to the birth date and today&amp;rsquo;s date. If this exceeds today&amp;rsquo;s date, then we are in case 2.&lt;br /&gt; &lt;br /&gt;Plug it in to a case statement that describes the two cases above and you get the solution.&lt;/p&gt;
&amp;nbsp;
&lt;h4&gt;Solution #4 - Provided by Steven Wang&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--Extract some Test Data using the AdventureWorks sample database&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;If&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Object_ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'dbo.employee_birthdate'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;is&lt;/span&gt; &lt;span style="color: #808080;"&gt;not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; &lt;span style="color: #008080;"&gt;dbo&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;employee_birthdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;span style="color: #008080;"&gt;[NationalIDNumber]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;[BirthDate]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Into&lt;/span&gt; &lt;span style="color: #008080;"&gt;dbo&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;employee_birthdate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;[HumanResources]&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;[Employee]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;111111&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'2000-02-29'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;222222&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'2004-02-29'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;333333&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Getdate&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Date&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;--Actual solution&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;[NationalIDNumber]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;[BirthDate]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Convert&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Char&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;8&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;CURRENT_TIMESTAMP&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;112&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; 0 &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Convert&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;char&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;8&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;[BirthDate]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 112&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; 10000 &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;Age&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;[dbo]&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;[employee_birthdate]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;Age&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Steven's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;To calculate the age based on birth date needs to take account of 2 considerations: year difference and the date was born.&lt;/li&gt;
&lt;li&gt;Use the year difference as the base of the age calculation. If the current date is less than the date was born, then the age needs to minus 1 year.&lt;/li&gt;
&lt;li&gt;Inspired by the dimensional surrogate integer date key, we can use the date integer format to perform the calculation. For example, if a birthdate is &amp;lsquo;2001-09-30&amp;rsquo;, and current date is &amp;lsquo;2012-10-01&amp;rsquo;, then we can use the difference (20121001 &amp;ndash; 20010930) / 10000 to get the age 11. As in T-SQL Integer / Integer is always Integer. In the same example, if the current date is &amp;lsquo;2012-09-29&amp;rsquo;, then the result (20120929 &amp;ndash; 20010930) / 10000 will be 10.&lt;/li&gt;
&lt;li&gt;As we can&amp;rsquo;t directly convert the date format to integer value, I convert the date to char(8) first and use minus 0 to implicitly convert the char value to integer value.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;As you can see, all four of the above solutions provide the result we were looking for, but do so in creatively different styles.&amp;nbsp; Each of these solutions highlights the power and flexibility that SQL Server provides. I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p&gt;Special thanks to Olaf, Tom, Monica, and Steven for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;h4&gt;Contributor Bios:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Steven Wang &lt;/strong&gt;has worked with SQL server for more than 10 years. Steven is an active SQL server community participant and speaks at events such as TechEd, CodeCamp, SQL User Group etc.&lt;/p&gt;
&lt;p&gt;Blog: &lt;a href="http://www.msbicoe.com/"&gt;www.MSBICOE.com&lt;/a&gt; | LinkedIn: &lt;a href="http://www.linkedin.com/pub/steven-wang/1b/ab/b8b"&gt;Steven Wang&lt;/a&gt; | MSDN Profile: &lt;a href="http://social.msdn.microsoft.com/profile/steven%20wang%20-%20shangzhou/?ws=usercard-inline"&gt;Steven Wang - Shangzhou&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tom Cooper&lt;/strong&gt; began his programming career in 1968, began working with database software in 1977, and first worked with Microsoft SQL Server in 1994 (version 4.21).&amp;nbsp; He is now very happily retired.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Monica Rivera&amp;nbsp;&lt;/strong&gt;has been working with SQL Server for the past 10 years. She worked as a DBA before joining Microsoft, where she works as a tester for the SQL Server Enterprise &amp;amp; Tier 1 Manageability group. &amp;nbsp;She is very active in both the English and Spanish SQL Server MSDN forums.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10373688" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="SQL Server 2005" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2005/" /><category term="SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /></entry><entry><title>TSQL - Solve it YOUR Way - Parsing Tips and Tricks - Returning Digits after the Decimal Point</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/10/23/tsql-solve-it-your-way-parsing-tips-and-tricks-returning-digits-after-the-decimal-point.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/10/23/tsql-solve-it-your-way-parsing-tips-and-tricks-returning-digits-after-the-decimal-point.aspx</id><published>2012-10-23T19:15:00Z</published><updated>2012-10-23T19:15:00Z</updated><content type="html">&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;As part of the blog series &lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL - Solve it YOUR Way&lt;/a&gt;, today&amp;nbsp;we will tackle a numeric parsing question.&amp;nbsp;&amp;nbsp;While past topics include solutions&amp;nbsp;that vary from 15-150 lines of TSQL code,&amp;nbsp;all of today's solutions will be very short.&amp;nbsp; A question was recently posted in the MSDN forums asking how to retrieve the digits after the decimal for a numeric data type.&amp;nbsp; Off the top of our heads, many people can probably come up with a few solutions.&amp;nbsp; After sending the question out to the blog series contributors, we came up with ten solutions that highlight creative parsing solutions and some less known tips and tricks within T-SQL.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Topic:&amp;nbsp; Given a numeric value, return the digits after the decimal (ex:&amp;nbsp; 3.142 returns 142)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4&gt;Solutions - provided by&amp;nbsp;Tom Cooper, Olaf Helper, Kent Waldrop, Jingyang Li, &amp;amp; Steven Wang&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Test data&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;9&lt;span style="color: #808080;"&gt;,&lt;/span&gt;3&lt;span style="color: #808080;"&gt;));&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Values &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1.479&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2.000&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;5.123&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Solution 1:&amp;nbsp;&amp;nbsp;ParseName&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;ParseName&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Solution 2:&amp;nbsp;&amp;nbsp;Modulo / Absolute Value &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;30&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;ABS&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;%&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt; 3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 30&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Result&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Solution 3:&amp;nbsp;&amp;nbsp;Slightly modified version using modulo.&amp;nbsp;&amp;nbsp;Note:&amp;nbsp;&amp;nbsp;This solution returns '0' for input 2.000, whereas others return '000'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;sign&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; 1000 &lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #808080;"&gt;%&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;integer&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;decimal_Part&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Solution 4:&amp;nbsp;&amp;nbsp;Reverse / Floor solution&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;REVERSE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;CAST&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;FLOOR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REVERSE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ABS&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;)))&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bigint&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Solution 5:&amp;nbsp;&amp;nbsp;Use the original number minus an integer converted from the original number to an integer and then convert the decimal number to a varchar (50) to use the STUFF function to remove the '0.' part from the decimal number.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Stuff&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Solution 6:&amp;nbsp;&amp;nbsp;Remove the "0." part from the above calculation with a substring function&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Solution 7:&amp;nbsp;&amp;nbsp;Use right function to remove the leading "0." from the string&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #808080;"&gt;RIGHT(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)))&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Solution 8:&amp;nbsp;&amp;nbsp;Find the . position using charindex and stuff everything before decimal &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Stuff&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'.'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Solution 9&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Stuff&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;0X2E&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Ltrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARBINARY&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Solution 10:&amp;nbsp;&amp;nbsp;CAST the string as an XML type and retrieve the value from the XML node&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Cast&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;N'&amp;lt;root&amp;gt;&amp;lt;row&amp;gt;'&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Replace&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Foo&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'.'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&amp;lt;/row&amp;gt;&amp;lt;row&amp;gt;'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&amp;lt;/row&amp;gt;&amp;lt;/root&amp;gt;'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;XML&lt;/span&gt;&lt;span style="color: #808080;"&gt;).&lt;/span&gt;&lt;span style="color: #008080;"&gt;value&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'(/root/row)[2]'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'nvarchar(50)'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;It is very common to&amp;nbsp;encounter situations where parsing is required in some capacity.&amp;nbsp; The solutions presented above cover common parsing techniques such as SUBSTRING and PARSENAME, but also leverage other constructs such as STUFF, REVERSE, Modulo, and others in creative ways.&amp;nbsp; I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p&gt;Special thanks to Tom, Olaf, Jingyang, Steven, and Kent for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10362148" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /><category term="String Parsing" scheme="http://blogs.msdn.com/b/samlester/archive/tags/String+Parsing/" /></entry><entry><title>TSQL - Solve it YOUR Way - Finding the Longest Repeated Substring</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/10/10/tsql-solve-it-your-way-finding-the-longest-repeated-substring.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/10/10/tsql-solve-it-your-way-finding-the-longest-repeated-substring.aspx</id><published>2012-10-10T23:29:00Z</published><updated>2012-10-10T23:29:00Z</updated><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;As part of the blog series &lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL - Solve it YOUR Way&lt;/a&gt;, today's topic will cover a common programming interview question where we are asked to find the longest repeated substring in a given string, followed by different solutions and explanations from three of the more helpful and creative contributors in the TSQL MSDN forums, Steven Wang, Kent Waldrop, and Jingyang Li.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Topic:&amp;nbsp; Given a string, find the longest repeated substring&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I was asked this question many years ago in a programming interview and I solved it in C# as was expected in the context of the role I was interviewing for.&amp;nbsp; A few days ago, a friend of mine was discussing&amp;nbsp;a recent programming interview where he was asked this same question.&amp;nbsp; While discussing solutions with him, I realized that this could make for a great topic for the Solve it YOUR Way series.&amp;nbsp; While T-SQL may be an unlikely method of solving this problem, the solutions below highlight the power of SQL Server through the creative solutions of the authors.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;As with any good interview question, the initial phrasing of the&amp;nbsp;question does not provide all of the necessary requirements to provide the best or only correct&amp;nbsp;solution.&amp;nbsp; In this case, in order to provide a correct solution, we would need details such as 1)&amp;nbsp;can substrings overlap, and 2)&amp;nbsp;what do we return if multiple substrings of the same length exist (first occurrence, all occurrences?), etc.&amp;nbsp; I intentionally left these details out of the original topic to allow the answers a bit more freedom in their solutions.&amp;nbsp; The solutions reflect these subtle differences.&lt;/p&gt;
&lt;h4&gt;Solution #1 - Provided by Steven Wang&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--First of all, we need a generic number table. I know that we can use the common table expression to create&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;--a virtual number table. But I still prefer to have a physical number table in place.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--As SQL server can only store up to 8000 characters for a string value, for simplicity I will create&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- a number table with maximum value equals to 8000.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;If&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Object_ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'dbo.LongestStr_Number'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'U'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;Is&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Begin&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TOP&lt;/span&gt; 8000 &lt;span style="color: #0000ff;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;INTO&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;dbo&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;LongestStr_Number&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;master&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;sys&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;all_columns&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;CROSS&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;master&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;sys&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;all_columns&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ALTER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #008080;"&gt;dbo&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;LongestStr_Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ADD&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CONSTRAINT&lt;/span&gt; &lt;span style="color: #008080;"&gt;PK_LongestStr_Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CLUSTERED &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FILLFACTOR&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 100&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;End&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--Solution Starts from here. The solution works only for SQL server 2012, by some change can be easily used for SQL server 2005/08&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;8000&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Length&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Set&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'ABAB CDCDCDCD ABAB'&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Length&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;With&lt;/span&gt; &lt;span style="color: #008080;"&gt;RepeatingNumber&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Row_Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Position&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;LongestStr_Number&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;Cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;Apply&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;1 &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;Col&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;LongestStr_Number&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;C&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;between&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Length&lt;/span&gt;&lt;span style="color: #808080;"&gt;/&lt;/span&gt;2 &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1 &lt;span style="color: #808080;"&gt;and&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Length&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;CTE&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;As&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;MySubString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;StringLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Count&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;MySubString&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;MySubString&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;MyCount&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Position&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;First_Value&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Position&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;MySubstring&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Position&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Rows&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Unbounded&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Preceding&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;StringLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;PositionGap&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;RepeatingNumber&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;CROSS&lt;/span&gt; &lt;span style="color: #808080;"&gt;APPly&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Position&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Length&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;MySubstring&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;@Length&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;StringLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Top&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;with&lt;/span&gt; &lt;span style="color: #008080;"&gt;Ties&lt;/span&gt; &lt;span style="color: #008080;"&gt;MySubstring&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;longest_repeating_String&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;CTE&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;MyCount&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; 1 &lt;span style="color: #808080;"&gt;and&lt;/span&gt; &lt;span style="color: #008080;"&gt;PositionGap&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;StringLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Desc&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Steven's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To get substrings of a string, the number of substrings is determined by the length of the substring. For a string with length equals to n, it has 1 substring if the length of the substring equals to n &amp;ndash; 1 + 1. If the length of the substring equals to n &amp;ndash; 2 + 1, then it can have 2 substrings with overlaps. With the same fashion, if the length of a substring equals to n &amp;ndash; m + 1 (m&amp;lt;=n), a string will have m number of substrings with overlaps.&lt;/p&gt;
&lt;p&gt;As our task is to find out the longest repeating substring with NO overlaps, the number m should be only starting from n/2 + 1 (remember in T-SQL integer n divided by 2 will always return back integer). However, this doesn&amp;rsquo;t guarantee the substrings without overlaps.&lt;/p&gt;
&lt;p&gt;Since each m number has m number of substrings which is calculated by the RepeatingNumber virtual table Cross Applied with a substring function, we can use the window function Count () by partitioning the m number and the substring to find out the repeating substrings with overlaps. If the window function Count() Over returns back the value is greater than 1, then we find a repeating substring. But at this stage, we don&amp;rsquo;t know if the repeating substrings are overlapped or not.&lt;/p&gt;
&lt;p&gt;I used another window function First_value to identify the repeating substrings without overlaps by using the code below:&lt;/p&gt;
&lt;p&gt;A.Position - First_Value(A.Position) Over(partition By A.Number, B.MySubstring Order by A.Position) - B.StringLen&lt;/p&gt;
&lt;p&gt;The idea of above code is to get the offset value of the starting point of the remaining substrings with same value as the first substring within the same Number group. If the offset value is negative, then we can conclude that the two substrings have overlaps. Otherwise, the two substrings are non-overlapped repeating substrings.&lt;/p&gt;
&lt;p&gt;At the last we use the TOP 1 clause with order by to get the longest repeating substring.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;I have to mention that the white spaces will be treated as characters in this solution. we can modify the solution to take care of it if it is needed.&lt;/p&gt;
&lt;h4&gt;Solution #2 - Provided by Kent Waldrop&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Create a numbers table for use in the solution&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; &lt;span style="color: #008080;"&gt;numbers&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;go&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; 400&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;begin&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;numbers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;@counter&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;end&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Create a temporary table containing the strings for which we will find the longest substring&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;400&lt;span style="color: #808080;"&gt;));&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'ABABABABABABABABABABABABABAB CDCDCDCDCDCDCDCDCDCDCDCDCDCD'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'SQL Server 2012 has introduced several new window functions and enhanced support for window aggregate functions by introducing window order and frame clauses, support for offset functions. In this session, the presenter will apply these new functions to solve some most frequently asked questions in MSDN T-SQL forum.'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'bananas'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Call me Ishmael. Some years ago--never mind how long precisely--having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world. It is a way I have of driving off the spleen and regulating the circulation.'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Solution starts here&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;--;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt; &lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;--(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; 400&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;--)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;--,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;with findRepeatChars&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;stringLength&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;len&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;)-&lt;/span&gt;&lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;)/&lt;/span&gt;2 &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;200&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;MatchString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;outer&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;numbers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; 400&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;and&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;len&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;and&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; 0&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;oa1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;primaryWork&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;max_N&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;matchString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rank&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;over&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;max_N&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;desc&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;Rn&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;findRepeatChars&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;9&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group2_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;25&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;49&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group4_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;90&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;89&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;144&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 143&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_Offset&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;calcGroupOffsets&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;sign&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_Index&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;sign&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_Index&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;sign&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group4_offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;group4_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group4_Index&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;sign&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_Index&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;sign&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group2_offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;group2_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)),&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;group2_Index&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;calcGroupIndices&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;group4_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #008080;"&gt;group4_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;group2_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #008080;"&gt;group2_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Offset&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #008080;"&gt;group6_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;144&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 57&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null),&lt;/span&gt; &lt;span style="color: #008080;"&gt;group5_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;90&lt;span style="color: #808080;"&gt;,&lt;/span&gt;55&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;group4_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;49&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;42&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null),&lt;/span&gt; &lt;span style="color: #008080;"&gt;group3_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;25&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;25&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;group2_Index&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;iif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;diff&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt;9&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null),&lt;/span&gt; 9&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Range&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;calcLoopParms&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;max&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;max_N&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;numbers&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; 57&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;and&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Range&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;and&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;charindex&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;location&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;theString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;location&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;loop_Offset&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;calcMaxN&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;matchString&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;longest_Substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;theString&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;input_String&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;primaryWork&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #008080;"&gt;Rn&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 1&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;OPTION &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;maxrecursion&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Kent's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The purpose of this query is to find the longest substring that is repeated within a given string.&amp;nbsp; Note that this query depends on a table of numbers.&amp;nbsp; This query is divided into three major parts:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;bull;&amp;nbsp; The "findRepeatChars" CTE&lt;br /&gt;&amp;nbsp; &amp;bull;&amp;nbsp; The "primaryWork" CTE&lt;br /&gt;&amp;nbsp; &amp;bull;&amp;nbsp; The outer query&lt;/p&gt;
&lt;p&gt;"findRepeatChars" locates all characters in the input string that are repeated at some point later in the string.&amp;nbsp; This CTE parses the string by using a table of numbers to spin through each character position except the last position, which cannot have a repeated character that comes later in the string.&lt;/p&gt;
&lt;p&gt;"primaryWork" processes the locations found by "findRepeatChars" and determines the longest substring beginning at the given location.&amp;nbsp; This CTE includes four CROSS APPLY operators to provide reusable calculations:&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;bull;&amp;nbsp; calcGroupOffsets&lt;br /&gt;&amp;nbsp; &amp;bull;&amp;nbsp; calcGroupIndices&lt;br /&gt;&amp;nbsp; &amp;bull;&amp;nbsp; calcLoopParms&lt;br /&gt;&amp;nbsp; &amp;bull;&amp;nbsp; calcMaxN&lt;/p&gt;
&lt;p&gt;calcGroupOffsets uses the built in IIF function to calculate offsets that can be used as a base locations for dividing a string into smaller segments that can be quickly processed with a linear search.&lt;/p&gt;
&lt;p&gt;calcGroupIndices determines if a string at the given location has a substring of a length determined by the group offset that repeats later in the given string.&lt;/p&gt;
&lt;p&gt;calcLoopParms uses COALESCE functions to select the largest group offset that defines a substring that is later repeated in the given string based on the computed group indices.&amp;nbsp; In addition, the built in IIF function is used to determine an appropriate search range based on the selected group offset and group index.&lt;/p&gt;
&lt;p&gt;calcMaxN uses the computed loop parameters and a table of numbers to determine the largest number that can be added to the offset.&amp;nbsp; This largest number when added to the largest group offset determines the largest substring that is repeated at a given location in the string.&lt;/p&gt;
&lt;p&gt;After the primaryWork CTE processes the four apply operators, a RANK function is used such that the rank is partitioned according to the input' string and ordered by the descending string lengths of all of the repeating substrings for a given input string to provide a row number (rn) column.&lt;/p&gt;
&lt;p&gt;The outer query calls the primaryWork CTE to process a list of all repeating substrings associated with a given input string.&amp;nbsp; Records are filtered with the outer query such that only records that have a row number (rn) of 1 are retained.&lt;/p&gt;
&lt;p&gt;Notes:&lt;br /&gt;I sort of used odd squares to segment out the data; I didn't investigate whether some kind of log method might be better.&lt;/p&gt;
&lt;h4&gt;Solution #3 - Provided by&amp;nbsp;Jingyang Li&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;max&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Set&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Server 2012 has introduced several new window functions and enhanced support for window aggregate functions by introducing window order and frame clauses, support for offset functions. In this session, the presenter will apply these new functions to solve some most frequently asked questions in MSDN T-SQL forum.'&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt; &lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;i&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;i&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;i&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;i&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;mycte1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;i&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;Step&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;i&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@MyString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;i&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;i&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt; &lt;span style="color: #808080;"&gt;CROSS&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt; &lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;mycte2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Step&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Count&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;over&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;cntSubSeq&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;Step&lt;/span&gt; &lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;rnSubSeq&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Len&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;maxLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;mycte1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;Step&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;mycte3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;Step&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;maxLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;rnSubSeq&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;mycte2&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color: #008080;"&gt;cntSubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;1&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;mycte4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;maxLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;RANK&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;maxLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;rnkLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Row_Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;maxLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Step&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;rnLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;mycte3&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt; &lt;span style="color: #008080;"&gt;mycte3&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt; &lt;span style="color: #808080;"&gt;and&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;rnSubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;rnSubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;1 &lt;span style="color: #808080;"&gt;OR&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;rnSubSeq&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;1 &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;WHERE &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Step&lt;/span&gt;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;SubSeq&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;[LognestRepeatingSubstring]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;mycte4&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color: #008080;"&gt;rnkLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;1&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;maxLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;StartPos&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;OPTION &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;maxrecursion&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Jingyang's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Step 1: Create a numbers table based on the string length but it would be better to use an auxiliary numbers table; &lt;br /&gt;Step 2: Cross join Numbers table to create positions and steps for all substring combinations; &lt;br /&gt;Step 3: Calculate the occurrence of substrings in various lengths, the length for each substring and a sequence within a substring&amp;nbsp;based on the step. The WHERE condition is to eliminate double count for any substrings after the last full step increments; &lt;br /&gt;Step 4: Get all substrings with at least two &lt;span style="color: black; line-height: 115%; font-family: 'Arial','sans-serif'; font-size: 9pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;occurrences&lt;/span&gt;; &lt;br /&gt;Step 5: Remove repeating substring with overlapping and get the ranking order for the longest substrings; &lt;br /&gt;Step 6: Retrieve the longest repeating substring(s) with two options.&lt;/p&gt;
&lt;p&gt;The option1 is to get longest string with tie breaker (first occurrence) by using rnLen=1 and&amp;nbsp; the second option is to get longest strings without tie breaker by using rnkLen=1;&lt;/p&gt;
&lt;p&gt;In order to change the default recursion limit from 100 to no limit for CTEs, the query hints MAXRECURSION is set to 0.&lt;/p&gt;
&lt;p&gt;Note:&amp;nbsp; I include the rank order to choose the first occurrence or all longest repeating substrings in the query.&lt;/p&gt;
&lt;h4&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;As you can see, all three of the above solutions provide variations of&amp;nbsp;the result we were looking for, but do so in creatively different styles.&amp;nbsp; Each of these solutions leverages different SQL Server language constructs and includes different considerations in the final solutions, including one solution that leverage new constructs from SQL Server 2012. I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p&gt;Special thanks to Jingyang, Steven, and Kent for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;h4&gt;Contributor Bios:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Steven Wang &lt;/strong&gt;has worked with SQL server for more than 10 years. Steven is an active SQL server community participant and speaks at events such as TechEd, CodeCamp, SQL User Group etc.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;Blog: &lt;a href="http://www.msbicoe.com/"&gt;www.MSBICOE.com&lt;/a&gt; | LinkedIn: &lt;a href="http://www.linkedin.com/pub/steven-wang/1b/ab/b8b"&gt;Steven Wang&lt;/a&gt; | MSDN Profile: &lt;a href="http://social.msdn.microsoft.com/profile/steven%20wang%20-%20shangzhou/?ws=usercard-inline"&gt;Steven Wang - Shangzhou&lt;/a&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kent Waldrop&lt;/strong&gt; started working with Sybase Transact SQL in 1989 as an application developer and continued working with Sybase until 1995 when SQL Server 6 was released.&amp;nbsp; At that time, he became a Microsoft SQL Server database administrator and has continued to work with Microsoft SQL Server ever since.&amp;nbsp; Currently he is a database architect working with Microsoft SQL Server, Oracle and UDB/DB2.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jingyang Li &lt;/strong&gt;has been working with SQL Server since he began his IT career as an ASP.NET developer in 2001. He enjoys working with T-SQL and recently took a full time job as a DBA.&amp;nbsp; He has been participating in the Microsoft forums with alias Limno.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10358486" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="SQL Server 2005" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2005/" /><category term="SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /><category term="Longest Repeated Substring" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Longest+Repeated+Substring/" /></entry><entry><title>TSQL - Solve it YOUR Way - Finding the percentage of NULL values for each column in a table</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/09/22/tsql-solve-it-your-way-finding-the-percentage-of-null-values-for-each-column-in-a-table.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/09/22/tsql-solve-it-your-way-finding-the-percentage-of-null-values-for-each-column-in-a-table.aspx</id><published>2012-09-22T15:29:00Z</published><updated>2012-09-22T15:29:00Z</updated><content type="html">&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;As part of the blog series &lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL - Solve it YOUR Way&lt;/a&gt;, today's topic will cover a question asked in the Transact-SQL MSDN Forums &lt;a title="here" href="http://social.msdn.microsoft.com/Forums/en/sqlexpress/thread/50b4f688-e294-434b-aa6f-e9fd1f64fa5f" target="_blank"&gt;here&lt;/a&gt;, followed by three different solutions from three of the more helpful and creative contributors in the TSQL MSDN forums, Jens Suessmeyer, Naomi Nosonovsky, and Jingyang Li.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: medium;"&gt;&lt;strong&gt;Topic:&amp;nbsp; How can I find the percentage of NULL values for each column in my table?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;For various reasons, people may need to determine the percentage of values in each column that are NULL.&amp;nbsp; Perhaps you are trying to calculate the percentage to determine if your&amp;nbsp;table could save disk space by leveraging&amp;nbsp;SPARSE columns. &amp;nbsp;In another real-world&amp;nbsp;example from the forums, a&amp;nbsp;user had an implementation where&amp;nbsp;partial&amp;nbsp;rows in a table were being&amp;nbsp;updated&amp;nbsp;at different&amp;nbsp;times.&amp;nbsp; When all rows were updated with a value and were thus NOT NULL, the table was considered "complete" and could be processed.&amp;nbsp; For this reason, the customer was trying to determine when the percentage of NULL values hit 0%.&amp;nbsp; In yet another case, the user wanted to present a comparison chart throughout the entire database showing the ratio of NULL values to NOT NULL values.&amp;nbsp; For the final example, take a look at the explanation provided below by Jens where he solved this problem at a customer site.&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Solution #1 - Provided by Jens Suessmeyer&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NOCOUNT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Statement&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Statement2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@FinalStatement&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;SYSNAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Production'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;SYSNAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Product'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;@Statement&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Statement&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'SUM(CASE WHEN '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;COLUMN_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' IS NULL THEN 1 ELSE 0 END) AS '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;COLUMN_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;','&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;13&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;@Statement2&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Statement2&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;COLUMN_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'*100 / OverallCount AS '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;COLUMN_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;','&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;13&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;COLUMNS&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color: #008080;"&gt;TABLE_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #008080;"&gt;TABLE_SCHEMA&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;IF&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;@@ROWCOUNT&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;RAISERROR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'TABLE OR VIEW with schema "%s" and name "%s" does not exists or you do not have appropriate permissions.'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;16&lt;span style="color: #808080;"&gt;,&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;ELSE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;@FinalStatement&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff0000;"&gt;'SELECT '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #808080;"&gt;LEFT(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Statement2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Statement2&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;2&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' FROM (SELECT '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #808080;"&gt;LEFT(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Statement&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Statement&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt;2&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff0000;"&gt;', COUNT(*) AS OverallCount FROM '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'.'&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;') SubQuery'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;EXEC&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@FinalStatement&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Jens' solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To put a bit more context to my solution, I was at a customer site where they found out that their API was occasionally losing the information on the way from the front end to the database, therefore NULLing out specific fields which should not be NULL. While they checked through their database and wrote queries for their hundreds of tables, they asked me working for another work stream to write something they can use. The simple idea is to grab a Table Name (and of course the appropriate schema) and create a Dynamic SQL statement which will calculate the percentage of NULL values in a specific table.&lt;/p&gt;
&lt;p&gt;From the query the following information will be returned:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/4578.JSResults2.png"&gt;&lt;img style="border: 0px currentColor;" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/4578.JSResults2.png" width="900" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In detail we see that the Color (on purpose or not) is not always entered showing a 49% of NULL values in that column. 58% for Size, 65% for SizeUnitMeasureCode, etc. The rest does have (at least NON NULL) values. If you would be also interested in the percentage of that are NULL OR Empty the query can be easily tweaked by changing the source code the following line from:&lt;/p&gt;
&lt;p&gt;@Statement = @Statement + 'SUM(CASE WHEN ' + COLUMN_NAME + ' IS NULL THEN 1 ELSE 0 END) AS ' + COLUMN_NAME + ',' + CHAR(13) ,&lt;/p&gt;
&lt;p&gt;to&lt;/p&gt;
&lt;p&gt;@Statement = @Statement + 'SUM(CASE WHEN LEN(ISNULL(' + COLUMN_NAME + ',' + REPLICATE(CHAR(39),2) + ')) = 0 THEN 1 ELSE 0 END) AS ' + COLUMN_NAME + ',' + CHAR(13) ,&lt;/p&gt;
&lt;p&gt;Leading to a change in the generated code of:&lt;/p&gt;
&lt;p&gt;SUM(CASE WHEN LEN(ISNULL(CompanyName, '')) = 0 THEN 1 ELSE 0 END) AS CompanyName,&lt;/p&gt;
&lt;p&gt;Feel free to include your own logic and forensic pattern to find all the black holes in your databases.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Solution #2 - Provided by Naomi Nosonovsky&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="17"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TotalCount&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DECIMAL&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;10&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;@SQL&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TotalCount&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;COUNT&lt;/span&gt;&lt;span style="color: #808080;"&gt;(*)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;[AdventureWorks]&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;[Production]&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;[Product]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;@SQL&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;STUFF&lt;/span&gt;&lt;span style="color: #808080;"&gt;((&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;', CAST(SUM(CASE WHEN '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Quotename&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;C&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;COLUMN_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' IS NULL THEN 1 ELSE 0 END) * 100.00 &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #ff0000;"&gt;/@TotalCount AS decimal(10,2)) AS ['&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;C&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;COLUMN_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' NULL %]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008000;"&gt;INFORMATION_SCHEMA&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008000;"&gt;COLUMNS&lt;/span&gt; &lt;span style="color: #008080;"&gt;C&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt; &lt;span style="color: #008080;"&gt;TABLE_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Product'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #008080;"&gt;TABLE_SCHEMA&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Production'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;C&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ORDINAL_POSITION&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;XML&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PATH&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;type&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;).&lt;/span&gt;&lt;span style="color: #008080;"&gt;value&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'.'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008080;"&gt;@SQL&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'SET @TotalCount = NULLIF(@TotalCount,0) &lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #ff0000;"&gt;SELECT '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@SQL&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #ff0000;"&gt;FROM [AdventureWorks].Production.Product'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;PRINT&lt;/span&gt; &lt;span style="color: #008080;"&gt;@SQL&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;EXECUTE&lt;/span&gt; &lt;span style="color: #800000;"&gt;SP_EXECUTESQL&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #008080;"&gt;@SQL&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;N'@TotalCount decimal(10,2)'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;@TotalCount&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Naomi's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;To get the percent of null values in a column we use this formula&lt;br /&gt; &lt;br /&gt;sum(case when ColumnName IS NULL then 1 else 0 end) * 100.00 / @TotalCount&lt;br /&gt; &lt;br /&gt;where @TotalCount is the number of rows in a table.&lt;/li&gt;
&lt;li&gt;We need to generate the above statement dynamically, so we use INFORMATION_SCHEMA.Columns view to do so.&lt;/li&gt;
&lt;li&gt;I use FOR XML PATH('') approach to concatenate information into one variable&lt;/li&gt;
&lt;li&gt;I use sp_executeSQL system stored procedure to run the dynamic SQL in order to supply a variable. Alternatively, of course, I could have declared and calculated @TotalCount inside the dynamic SQL.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Solution #3 - Provided by Jingyang Li&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NOCOUNT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Product'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Production'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;@sql&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;4000&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;@col&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #008080;"&gt;#t&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;id&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;INT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;ColName&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;50&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;[NULL%]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DECIMAL&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;8&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;c_cursor&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CURSOR&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;column_Name&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;[INFORMATION_SCHEMA]&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;[COLUMNS]&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;TABLE_NAME&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #008080;"&gt;TABLE_SCHEMA&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #008080;"&gt;IS_Nullable&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'YES'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;OPEN&lt;/span&gt; &lt;span style="color: #008080;"&gt;c_cursor&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;c_cursor&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt; &lt;span style="color: #008080;"&gt;@col&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WHILE &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0 &lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;BEGIN&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #008080;"&gt;@sql&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;N' INSERT INTO #t (ColName, [NULL%])&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff0000;"&gt;SELECT TOP 1 '''&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@col&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''' , (COUNT(*) over() *1.0- COUNT('&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;@col&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;') OVER()*1.0)/COUNT(*) Over() *100.0 as [NULL%] FROM '&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Quotename&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@TABLE_SCHEMA&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'.'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Quotename&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #008080;"&gt;@TABLE_NAME&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008000;"&gt;-- print @sql&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;EXEC &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@sql&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FETCH&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NEXT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;c_cursor&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt; &lt;span style="color: #008080;"&gt;@col&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;END&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;CLOSE&lt;/span&gt; &lt;span style="color: #008080;"&gt;c_cursor&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DEALLOCATE&lt;/span&gt; &lt;span style="color: #008080;"&gt;c_cursor&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;ColName&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;[NULL%]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #008080;"&gt;#t&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DROP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE&lt;/span&gt; &lt;span style="color: #008080;"&gt;#t&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Jingyang's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Jingyang initially sent a solution very similar to that of Naomi, so in order to provide an additional technique, he also provided the CURSOR based solution above.&amp;nbsp; The cursor is built by leveraging the INFORMATION_SCHEMA table as used in all three solutions, but Jingyang uses a nice optimization technique of only querying for Is_Nullable = 'YES' to only obtain NULLable fields.&amp;nbsp; In the CURSOR loop, the solution relies on some creative use of the OVER() function to generate the percentage and results, which&amp;nbsp;are displayed in a way that is very readable and concise.&lt;/p&gt;
&lt;h4&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;As you can see, all three of the above solutions provide the intended result we were looking for, but do so in creatively different styles, this time including our first CURSOR based solution.&amp;nbsp; I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p&gt;Special thanks to Jens, Naomi, and Jingyang for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;h4&gt;Contributor Bios:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Jens Suessmeyer&lt;/strong&gt; is an MCS Consultant in Germany and has been working with SQL Server since version 6.0.&amp;nbsp; He is very active in the forums and in his blog (&lt;a href="http://blogs.msdn.com/b/jenss"&gt;http://blogs.msdn.com/b/jenss&lt;/a&gt;), providing outstanding real-world solutions and insight.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Naomi Nosonovsky&lt;/strong&gt;, Senior Software Developer, has more than 15 years of enterprise experience in analysis, design, development and implementation of high-performance client/server data management solutions. She is a Personality of the Year for 2008, 2009, 2010 and 2011 at www.universalthread.com in .NET, SQL Server &amp;amp; VFP categories. She is also an All Star contributor/MCC Community Contributor at forums.asp.net and MSDN T-SQL forum.&amp;nbsp; She also actively blogs at &lt;a href="http://blogs.lessthandot.com/index.php/All/?disp=authdir&amp;amp;author=218"&gt;http://blogs.lessthandot.com/index.php/All/?disp=authdir&amp;amp;author=218&lt;/a&gt;&amp;nbsp;and &lt;a href="http://beyondrelational.com/members/naomi/modules/2/posts.aspx?Tab=16"&gt;http://beyondrelational.com/members/naomi/modules/2/posts.aspx?Tab=16&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jingyang Li &lt;/strong&gt;has been working with SQL Server since he began his IT career as an ASP.NET developer in 2001. He enjoys working with T-SQL and recently took a full time job as a DBA.&amp;nbsp; He has been participating in the Microsoft forums under the alias Limno.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10352333" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="SQL Server 2005" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2005/" /><category term="SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /><category term="NULL Values" scheme="http://blogs.msdn.com/b/samlester/archive/tags/NULL+Values/" /></entry><entry><title>TSQL - Solve it YOUR Way - Finding the MAX Value from Multiple Columns</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/09/10/tsql-solve-it-your-way-finding-the-max-value-from-multiple-columns.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/09/10/tsql-solve-it-your-way-finding-the-max-value-from-multiple-columns.aspx</id><published>2012-09-11T00:07:00Z</published><updated>2012-09-11T00:07:00Z</updated><content type="html">&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;As part of the blog series &lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL - Solve it YOUR Way&lt;/a&gt;, today's topic will cover a question recently asked in the Transact-SQL MSDN Forums &lt;a title="here" href="http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/0ae69778-4adb-4862-aff9-27d634340e90" target="_blank"&gt;here&lt;/a&gt;, followed by four different solutions from three of the more helpful and creative contributors in the TSQL MSDN forums, Jingyang Li, Steven Wang, and Kent Waldrop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Topic:&amp;nbsp; I have a table with three datetime columns and want to return the most recent date for each row.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;In the following image, we see an example of our three datetime columns, Date1, Date2, and Date3, followed by a "MaxDate" column containing the latest date of the three.&amp;nbsp; The following solutions will show us various ways to calculate this "MaxDate" value.&lt;br /&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/2318.MaxDate.png"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/2318.MaxDate.png" width="359" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a great question for our blog series because there are so many ways to tackle this question.&amp;nbsp; In fact, the forum post included his original solution using a CASE statement, but he was looking for additional ways to solve the problem.&amp;nbsp; Let's take a look at four additional ways to accomplish this.&lt;/p&gt;
&lt;h4&gt;Solution #1 and Solution #2 - Provided by Jingyang Li&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt; &lt;span style="color: #008080;"&gt;Dates&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;id&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;identity&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;1&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;date1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;datetime&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;datetime&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;datetime&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;Dates&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;values&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/1/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/2/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/3/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/1/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,null,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/13/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/1/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/2/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,null),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'8/30/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'9/10/2012'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1/1/2013'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;(null,null,null)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--Solution #1 - UNPIVOT approach&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;id&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;latestdate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;Dates&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt; &lt;span style="color: #808080;"&gt;LEFT&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;id&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Max&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date123&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;latestdate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FROM&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;id&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;span style="color: #008080;"&gt;Dates&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;src&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;UNPIVOT&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date123&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt; &lt;span style="color: #008080;"&gt;dates&lt;/span&gt; &lt;span style="color: #808080;"&gt;IN&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;[date1]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;[date2]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080;"&gt;[date3]&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #008080;"&gt;unpvt&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;GROUP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;id&lt;/span&gt; &lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;on&lt;/span&gt; &lt;span style="color: #008080;"&gt;a&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;id&lt;/span&gt;&lt;span style="color: #808080;"&gt;=&lt;/span&gt;&lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;id&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--Solution #2 - Using the new SQL Server 2012 IIF function&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #ff00ff;"&gt;NULLIF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;IIF&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #ff00ff;"&gt;IIF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;IIF&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;)),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #ff0000;"&gt;'1/1/1900'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;latestdate&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;id&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Isnull&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'1/1/1900'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Isnull&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'1/1/1900'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Isnull&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'1/1/1900'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;date3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;Dates&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;t&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Jingyang's solutions:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Solution #1:&amp;nbsp; My first thought was to unpivot these columns and use max function to get the latest date for each row.&amp;nbsp; Since you cannot easily take the max value of multiple columns in a table, we can use the unpivot function to accomplish this.&amp;nbsp; To include all NULL dates, we can use a LEFT JOIN to generate the result set.&lt;/p&gt;
&lt;p&gt;Solution #2:&amp;nbsp; Later on I found that we can use SQL Server 2012 inline IIF function to compare all cases to get the latest date.&amp;nbsp; Within the query, we use ISNULL and NULLIF to handle NULL values.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Solution #3 - Provided by Steven Wang&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--Test Data Preparation&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyTable&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Int&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Identity&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;1&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #008080;"&gt;Date1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Date&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Date2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Date&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Date3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Date&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Into&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyTable&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Values &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-09-12'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-07-25'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-06-06'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2013-03-22'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-06-03'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2013-03-11'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(NULL,NULL,NULL)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-10-22'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-12-30'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-05-29'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(NULL,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-08-07'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,NULL)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-05-05'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-08-03'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'2012-09-16'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;--Actual Solution&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;Date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;MaxDate&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MyTable&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;Cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;Apply&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Max&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;MyDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;MaxDate&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;From &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Values &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;Date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;MyDate&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;C&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Steven's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As we need to find the latest date among 3 columns, the method using the value comparison between 2 different columns is a little clumsy. How about if we need to do the same when we have&lt;br /&gt;more than 3 columns to compare?&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;One logical way to perform this comparison is to UNPIVOT the 3 columns&amp;rsquo; values into one column and then use the MAX aggregation function to get the latest date value.&lt;u1:p&gt;&lt;/u1:p&gt; As Jingyang showed, it is easy to use the UNPIVOT clause to transpose the multiple column data into one row. However, UNPIVOT normally has performance issues so we will look for a different solution.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;Here, I will use a table value constructor to perform the UNPIVOT.&amp;nbsp; In SQL Server 2008 or later, we can use VALUES clause in a standard way as a table value constructor to create a derived table.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;The idea is to pass three base table date columns into a derived table constructed by VALUES clause by using the CROSS APPLY clause. Each column passed into the derived table creates a row. We can then perform an MAX aggregation to get the latest date for each row from the base table inside the derived table.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;This technically is fun and performance-wise will be better than using the UNPIVOT clause to transpose columns and perform aggregation.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Solution #4 - Provided by Kent Waldrop&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #ffffff; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px; padding: 0px 0px 0px 5px;" start="2"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;test_Id&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;date&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;date&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;date&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120102'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #808080;"&gt;null&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; 3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120101'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120102'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120103'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; 4&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20130322'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120603'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20130311'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; 5&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120912'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120725'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'20120606'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp; &lt;span style="color: #008080;"&gt;test_Id&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;when&lt;/span&gt; &lt;span style="color: #008080;"&gt;date12&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date12&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;then&lt;/span&gt; &lt;span style="color: #008080;"&gt;date12&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #008080;"&gt;date3&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;end&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;greatest_Date&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;case&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;when&lt;/span&gt; &lt;span style="color: #008080;"&gt;date1&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;date1&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;then&lt;/span&gt; &lt;span style="color: #008080;"&gt;date1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #008080;"&gt;date2&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;end&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;date12&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;xa1&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Kent's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;My solution uses a CROSS APPLY to provide re-use of a derived column "date12".&amp;nbsp; Date12 is the greater of date1 and date2.&lt;/p&gt;
&lt;p&gt;A key trick that is involved with this query is the following two comparisons:&lt;br /&gt;&amp;nbsp;&amp;nbsp; date1&amp;nbsp; &amp;gt;= coalesce(date2, date1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; date12 &amp;gt;= coalesce(date3, date12)&lt;/p&gt;
&lt;p&gt;These two comparisons above are logically equivalent to these two comparisons:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; date1 &amp;gt;= date2 or date1&amp;nbsp; is not null and date2 is null&lt;br /&gt;&amp;nbsp;&amp;nbsp; date12 &amp;gt;= date3 or date12 is not null and date3 is null&lt;/p&gt;
&lt;p&gt;The greatest date is selected by fetching the greater of date1 and date2 in the cross apply and then selecting the greater of date3 and the results of the date that was selected in the cross apply.&lt;/p&gt;
&lt;p&gt;The main ideas driving this particular form of the query are (1) to make my additional operator a "Compute Scalar" operation rather than something else and (2) aim at code that is small in size to make the code easier to understand.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Other alternatives:&lt;/p&gt;
&lt;p&gt;&amp;bull;&amp;nbsp; Use a CTE or a derived table instead of the APPLY operator since the APPLY operator is not ANSI standard&lt;br /&gt;&amp;bull;&amp;nbsp; Use the expanded OR / AND comparisons rather than COALESCE&lt;/p&gt;
&lt;h4&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;As you can see, all four of the above solutions provide the result we were looking for, but do so in creatively different styles.&amp;nbsp; Each of these solutions leverages different SQL Server language constructs and includes different considerations in the final solutions, including one solution that leverage new constructs from SQL Server 2012. I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p&gt;Special thanks to Jingyang, Steven, and Kent for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;h4&gt;Contributor Bios:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Steven Wang &lt;/strong&gt;has worked with SQL server for more than 10 years. Steven is an active SQL server community participant and speaks at events such as TechEd, CodeCamp, SQL User Group etc.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;Blog: &lt;a href="http://www.msbicoe.com/"&gt;www.MSBICOE.com&lt;/a&gt; | LinkedIn: &lt;a href="http://www.linkedin.com/pub/steven-wang/1b/ab/b8b"&gt;Steven Wang&lt;/a&gt; | MSDN Profile: &lt;a href="http://social.msdn.microsoft.com/profile/steven%20wang%20-%20shangzhou/?ws=usercard-inline"&gt;Steven Wang - Shangzhou&lt;/a&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jingyang Li &lt;/strong&gt;has been working with SQL Server since he began his IT career as an ASP.NET developer in 2001. He enjoys working with T-SQL and recently took a full time job as a DBA.&amp;nbsp; He has been participating in the Microsoft forums with alias Limno.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kent Waldrop&lt;/strong&gt; started working with Sybase Transact SQL in 1989 as an application developer and continued working with Sybase until 1995 when SQL Server 6 was released.&amp;nbsp; At that time, he became a Microsoft SQL Server database administrator and has continued to work with Microsoft SQL Server ever since.&amp;nbsp; Currently he is a database architect working with Microsoft SQL Server, Oracle and UDB/DB2.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10348015" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="SQL Server 2005" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2005/" /><category term="SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /></entry><entry><title>TSQL - Solve it YOUR Way - Gaps and Islands... With a Twist!  </title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/09/04/tsql-solve-it-your-way-gaps-and-islands-with-a-twist.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/09/04/tsql-solve-it-your-way-gaps-and-islands-with-a-twist.aspx</id><published>2012-09-05T04:06:00Z</published><updated>2012-09-05T04:06:00Z</updated><content type="html">&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;As part of the blog series &lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL - Solve it YOUR Way&lt;/a&gt;, today's topic is a variation of the popular T-SQL question titled "Gaps and Islands" followed by three different solutions presented by three of the more helpful and creative&amp;nbsp;contributors in the TSQL MSDN forums, Steven Wang, Alejandro Mesa, and Tom Cooper.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Gaps and Islands questions revolve around sequential data with missing values.&amp;nbsp; The term "gaps" refers to the ranges of missing values, while the team "islands" refers to the ranges of existing/sequential values.&amp;nbsp; This topic takes on many forms and shows up occasionally in SQL Server interviews, with variations such as the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Find your favorite sports team's longest winning streak given the win/loss results&lt;/li&gt;
&lt;li&gt;Given a table of natural numbers, return a two column table showing the missing numbers (ex:&amp;nbsp; missing from range 6-8, 11-21, etc)&lt;/li&gt;
&lt;li&gt;Find the missing Order IDs given an Orders table with sequential Order IDs&lt;/li&gt;
&lt;li&gt;Write a function that returns the hours worked in the past month by a specific&amp;nbsp;employee&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Topic:&amp;nbsp; Given a series of integer ranges representing painted segments of a bridge, find the areas of the bridge where there is no paint, as well as the areas where the paint has been overlapped.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Recently, a question was asked in the TSQL MSDN forums that was a variation of the gaps and islands question, with a small twist.&amp;nbsp; The question revolves around a bridge of length 100 that has been painted in various segments as shown with the following data:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/0535.BridgeData.png"&gt;&lt;img border="0" alt="" src="http://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/0535.BridgeData.png" width="372" height="148" /&gt;&lt;/a&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-54-50/3364.BridgeData.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For this exercise, we need to determine how to return the gaps (the areas where the bridge is NOT painted) as well as where the paint has been overlapped.&lt;/p&gt;
&lt;h4&gt;Solution #1:&amp;nbsp; Provided by Steven Wang&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;/****************************************************************&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;Solution Preparation:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;1. Create a temp table #BridgeP&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;2. Create a temp table #BridgeMaxLength to hold the max length of all bridges&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;3. Insert some test data&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;4. Create nonclustered index to boost the performance for large volume of data.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;Note: the solution I presented here is inspired from the book: &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000;"&gt;&amp;nbsp;&amp;nbsp;Inside Microsoft SQL Server 2008: T-SQL Programming&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;****************************************************************/&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt; &lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;ID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Int&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Identity&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Constraint&lt;/span&gt; &lt;span style="color: #008080;"&gt;pk_BridgeMeaurement&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Primary&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Key &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ID&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Constraint&lt;/span&gt; &lt;span style="color: #008080;"&gt;check_From_Less_than_to&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Check&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt; &lt;span style="color: #008080;"&gt;#BridgeMaxLength&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Null&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgeMaxLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Values &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 10.0002&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 20.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 18&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 21.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 11.1234&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 20.0002&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 40&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 50.0003&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 19.11&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 35&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 46.2966&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 50.6472&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 31.7084&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 46.1286&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 178.2604&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 190.6864&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 38.7394&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 43.7234&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 27.266&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 43.3031&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 122.8653&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 142.6958&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 14.7856&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 21.6676&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 67.6054&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 68.1884&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 64.8543&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 66.4028&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 123.331&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 134.4094&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 199.3904&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 201.1482&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 88.1347&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 103.9153&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;#BridgeMaxLength&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Values &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 100.0000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 200.0000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 250.0000&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Nonclustered&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Index&lt;/span&gt; &lt;span style="color: #008080;"&gt;idx_Bridge_From_To&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;On&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Create&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Nonclustered&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Index&lt;/span&gt; &lt;span style="color: #008080;"&gt;idx_Bridge_To_From&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;On&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;/**********************************************************************************&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;Solution starts here:&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;1. Since the bridge paint measurement records have overlaps, we first need to identify&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;all those paint starting points for a bridge. These starting points must not be adjacent&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;to any end painting points recorded and must be less than any other starting points within&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;the same packed painting group.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;**********************************************************************************/&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;With&lt;/span&gt; &lt;span style="color: #008080;"&gt;RangeStart&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;As&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Distinct&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;RangeSTart&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Exists&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;And&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;And&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;/**********************************************************************************&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;2. With the same logic as starting point but in a reversed way, the ending points&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;can be identified as below:&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;**********************************************************************************/&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;RangeEnd&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;As&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Distinct&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;RangeEnd&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Exists&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;And&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;And&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;A&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;/**********************************************************************************&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;3. Since a bridge should always start from 0 and end with the maximum length, we add&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;these 2 points together with all starting points and end points.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;The union all query results must come back with an even number (pairs of start and &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;end point) for each bridge.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;4. In order to put starting point and an end point pair into the same group. I used&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;row_Number function:&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;(Row_Number() Over(Partition By BridgePID Order by GapStart) - 1) / 2&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;If the row number is 1, it returns back 0; if the row number is 2, it also return back&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;0. &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;**********************************************************************************/&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapValue&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;As&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Row_Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Partition&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; 2 &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;MyGroup&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 0.0000 &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeMaxLength&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;RangeStart&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;RangeStart&lt;/span&gt; &lt;span style="color: #008080;"&gt;S&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;RangeEnd&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;RangeEnd&lt;/span&gt; &lt;span style="color: #008080;"&gt;E&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgeMaxLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;#BridgeMaxLength&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #008080;"&gt;X&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Min&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Max&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapEnd&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;From&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;GapValue&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Group&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;MyGroup&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Having&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;Min&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Max&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;by&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt; &lt;span style="color: #008080;"&gt;#BridgeP&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Drop&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt; &lt;span style="color: #008080;"&gt;#BridgeMaxLength&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Explanation of Steven's solution:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As&amp;nbsp;documented in the comments throughout the solution, Steven takes the following approach.&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;&lt;ol&gt;
&lt;li&gt;Since the bridge paint records have overlaps, we first need to identify all of&amp;nbsp;those paint starting points for&amp;nbsp;the entire&amp;nbsp;bridge. These starting points must not be adjacent to any end painting points recorded and must be less than any other starting points within the same packed painting group.&lt;/li&gt;
&lt;li&gt;Using similar logic, but in a reversed order, we will identify the ending points.&lt;/li&gt;
&lt;li&gt;Since a bridge should always start from 0 and end with the maximum length, we add these 2 points together with all starting points and end points.&amp;nbsp; The union all query results must come back with an even number (pairs of start and end point) for each bridge.&lt;/li&gt;
&lt;li&gt;In order to put starting point and ending point pairs into the same group, I use the Row_Number function:&lt;br /&gt;(Row_Number() Over(Partition By BridgePID Order By GapStart) - 1) / 2&lt;br /&gt;If the row number is 1 or 2, then return 0.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Solution #2:&amp;nbsp;&amp;nbsp;&amp;nbsp;Provided by Alejandro Mesa&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NOCOUNT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;USE&lt;/span&gt; &lt;span style="color: #008080;"&gt;tempdb&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@MaxBridgeLenght&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 100.0000&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Values&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;10.0002&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt;18.0000&lt;span style="color: #808080;"&gt;,&lt;/span&gt;21.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt;11.12345&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20.0002&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;4&lt;span style="color: #808080;"&gt;,&lt;/span&gt;40.0000&lt;span style="color: #808080;"&gt;,&lt;/span&gt;50.0003&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;5&lt;span style="color: #808080;"&gt;,&lt;/span&gt;19.1100&lt;span style="color: #808080;"&gt;,&lt;/span&gt;35.0000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt; &lt;span style="color: #008080;"&gt;C0&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;0&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;100&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 100&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;[type]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;sub&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;[type]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;sub&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C0&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;[type]&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;[type]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ROWS&lt;/span&gt; &lt;span style="color: #808080;"&gt;BETWEEN&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNBOUNDED&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PRECEDING&lt;/span&gt; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CURRENT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ROW&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;sub&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;cnt&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C1&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;((&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;grp&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C2&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;cnt&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;MIN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C3&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;GROUP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;grp&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;*,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;LEAD&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;nxt_FromLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C4&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;nxt_FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapEnd&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C5&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;nxt_FromLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; 0.0001&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;GapStart&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GapEnd&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;0.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0002&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;35.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;40.0000&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;50.0003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100.0000&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The beauty of this approach is that it could easily be adapted to report on multiple bridges or roads, whatever it is that you are painting, as in the following modified example.&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SET&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;NOCOUNT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;USE&lt;/span&gt; &lt;span style="color: #008080;"&gt;tempdb&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; &lt;span style="color: #808080;"&gt;NOT&lt;/span&gt; &lt;span style="color: #808080;"&gt;NULL,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Decimal&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;14&lt;span style="color: #808080;"&gt;,&lt;/span&gt;4&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Values&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;10.0002&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;,&lt;/span&gt;18.0000&lt;span style="color: #808080;"&gt;,&lt;/span&gt;21.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 3&lt;span style="color: #808080;"&gt;,&lt;/span&gt;11.12345&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20.0002&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 4&lt;span style="color: #808080;"&gt;,&lt;/span&gt;40.0000&lt;span style="color: #808080;"&gt;,&lt;/span&gt;50.0003&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 5&lt;span style="color: #808080;"&gt;,&lt;/span&gt;19.1100&lt;span style="color: #808080;"&gt;,&lt;/span&gt;35.0000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;10.0002&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;,&lt;/span&gt;18.0000&lt;span style="color: #808080;"&gt;,&lt;/span&gt;21.0004&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 3&lt;span style="color: #808080;"&gt;,&lt;/span&gt;11.12345&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20.0002&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 4&lt;span style="color: #808080;"&gt;,&lt;/span&gt;40.0000&lt;span style="color: #808080;"&gt;,&lt;/span&gt;50.0003&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 5&lt;span style="color: #808080;"&gt;,&lt;/span&gt;25.1100&lt;span style="color: #808080;"&gt;,&lt;/span&gt;35.0000&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Itzik's approach&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt; &lt;span style="color: #008080;"&gt;C0&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DISTINCT&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;@BridgeP&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;B&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;CROSS&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;VALUES &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;0&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 0&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;100&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 100&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C1&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt;1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;[type]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;sub&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;UNION&lt;/span&gt; &lt;span style="color: #808080;"&gt;ALL&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;-&lt;/span&gt;1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;[type]&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;sub&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;SUM&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;[type]&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;PARTITION&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;[type]&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;DESC&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;ROWS&lt;/span&gt; &lt;span style="color: #808080;"&gt;BETWEEN&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;UNBOUNDED&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PRECEDING&lt;/span&gt; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;CURRENT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ROW&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;sub&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;cnt&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C3&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;((&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PARTITION&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;/&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;grp&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C2&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;cnt&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; 0&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;MIN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;MAX&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;ln&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C3&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;GROUP&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;grp&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;C5&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;LEAD&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;OVER&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;PARTITION&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;FromLen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;nxt_FromLen&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C4&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;BridgeID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;nxt_FromLen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapEnd&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;C5&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WHERE&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008080;"&gt;nxt_FromLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;ToLen&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;gt;&lt;/span&gt; 0.0001&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;GO&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;/*&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;BridgeID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GapStart&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GapEnd&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0002&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;35.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;40.0000&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;50.0003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100.0000&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;10.0002&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;21.0004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;25.1100&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;35.0000&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;40.0000&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;50.0003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;100.0000&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;*/&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alejandro's Explanation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I see here two problems in one. The first one would be finding overlapping ranges, and then identifying gaps.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Itzik Ben-Gan included these two problems in his last book about window functions. He explains the solutions for SQL Server 2012 and also for previous versions in the following book:&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Microsoft&amp;reg; SQL Server&amp;reg; 2012 High-Performance T-SQL Using Window Functions&lt;br /&gt;&amp;nbsp;&lt;a href="http://shop.oreilly.com/product/0790145323088.do"&gt;http://shop.oreilly.com/product/0790145323088.do&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;I am going to use his approach to tackle your question since I didn't see any solution using the new support to the OVER clause (window functions).&lt;/p&gt;
&lt;p&gt;Finding gaps using LEAD function is simple and I think that reading the code is enough. For the solution about packing overlapping ranges, the key is in splitting the range (each row) in two sets, one for the initial of the range (FromLen) and another for the end (ToLen), and adding a type (+1 or -1) depending if it is the start (FromLen) or the end of the range (ToLen). We are going to calculate the running total of [type] minus the [sub], and we will be interested only on those where the formula ([cnt]) is zero. This will give us pairs of start and end, and we can identify the pairs by enumerating those rows and using ((ROW_NUMBER() OVER(...) - 1 / 2) + 1), the rest is grouping and calculating the MIN and MAX per group.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Note: I didn't include an ORDER BY clause for presentation purpose, neither setup proper indexes to support the OVER clause.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Solution #3:&amp;nbsp; Provided by Tom Cooper&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #fff; max-height: 300px; overflow: auto;"&gt;&lt;ol style="background: #ffffff; margin: 0; padding: 0 0 0 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Sample data&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Bridge&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;fromlen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;tolen&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Bridge&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;BridgePID&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;fromlen&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;tolen&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Values&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;2&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;20&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;40&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;50&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;35&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Create Numbers cte&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;With&lt;/span&gt; &lt;span style="color: #008080;"&gt;N2&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; 1 &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Union&lt;/span&gt; &lt;span style="color: #808080;"&gt;All&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;N4&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;na&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;N2&lt;/span&gt; &lt;span style="color: #008080;"&gt;na&lt;/span&gt; &lt;span style="color: #808080;"&gt;Cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;Join&lt;/span&gt; &lt;span style="color: #008080;"&gt;N2&lt;/span&gt; &lt;span style="color: #008080;"&gt;nb&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;N16&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;na&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;N4&lt;/span&gt; &lt;span style="color: #008080;"&gt;na&lt;/span&gt; &lt;span style="color: #808080;"&gt;Cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;Join&lt;/span&gt; &lt;span style="color: #008080;"&gt;N4&lt;/span&gt; &lt;span style="color: #008080;"&gt;nb&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;N256&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;na&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;N16&lt;/span&gt; &lt;span style="color: #008080;"&gt;na&lt;/span&gt; &lt;span style="color: #808080;"&gt;Cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;Join&lt;/span&gt; &lt;span style="color: #008080;"&gt;N16&lt;/span&gt; &lt;span style="color: #008080;"&gt;nb&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Row_Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;N256&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Now get only the missing numbers and a row_number value over those numbers&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;MissingNumbers&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Row_Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;()&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Over &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Order&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;SeqNbr&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;Numbers&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Where&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;=&lt;/span&gt; 100 &lt;span style="color: #808080;"&gt;And&lt;/span&gt; &lt;span style="color: #808080;"&gt;Not&lt;/span&gt; &lt;span style="color: #808080;"&gt;Exists(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #808080;"&gt;*&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Bridge&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Where&lt;/span&gt; &lt;span style="color: #008080;"&gt;n&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;Between&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;fromlen&lt;/span&gt; &lt;span style="color: #808080;"&gt;And&lt;/span&gt; &lt;span style="color: #008080;"&gt;b&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;tolen&lt;/span&gt;&lt;span style="color: #808080;"&gt;))&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Now product the islands report&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Select&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Min&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;m&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapStart&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;Max&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;m&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #008080;"&gt;GapEnd&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;From&lt;/span&gt; &lt;span style="color: #008080;"&gt;MissingNumbers&lt;/span&gt; &lt;span style="color: #008080;"&gt;m&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Group&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;By&lt;/span&gt; &lt;span style="color: #008080;"&gt;m&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;-&lt;/span&gt; &lt;span style="color: #008080;"&gt;m&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;SeqNbr&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tom's Explanation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As noted in the original forum post, this is essentially an &amp;ldquo;Islands and Gaps&amp;rdquo; problem.&amp;nbsp; The desired result is all the islands of unpainted points.&amp;nbsp; But the input data is somewhat atypical.&amp;nbsp; In a typical islands and gaps problem, the data is a series of points (for example, you have a table where each row had two columns &amp;ndash; employeeid and sickday (datatype date)).&amp;nbsp; And you want a report show the ranges of days an employee was out sick.&amp;nbsp; So that you could produce a report like Employee 5 was out Jan 5 thru Jan 7.&amp;nbsp; There is a good deal of information on how to solve this type of problem available both online and in books.&amp;nbsp; One good discussion is by Itzik Ben-Gan at &lt;a href="http://www.manning.com/nielsen/SampleChapter5.pdf"&gt;http://www.manning.com/nielsen/SampleChapter5.pdf&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So if the input data was a set of rows showing all the unpainted points, using that technique would solve our problem.&amp;nbsp; But instead, the data is a series of ranges of painted points (possibly overlapping).&amp;nbsp; So we want to first find all the points which are not in any of those ranges.&amp;nbsp; To do this we need to first get all numbers between the minimum and maximum points (1 and 100 in this case).&amp;nbsp; We do that either by using a Numbers table that was previously created or by building a Numbers cte as part of the query.&amp;nbsp; I choose to build one with a cte since that way I did not have to assume the OP had a permanent numbers table.&amp;nbsp; The method I used is a common one, the earliest reference I know to it is also by Itzik Ben-Gan at &lt;a href="http://www.sqlmag.com/article/sql-server/virtual-auxiliary-table-of-numbers"&gt;http://www.sqlmag.com/article/sql-server/virtual-auxiliary-table-of-numbers&lt;/a&gt;.&amp;nbsp;&lt;br /&gt;Once I had this table of numbers I then kept only the numbers which were in the range 1 to100 and were not in any of the painted ranges in the original data.&amp;nbsp; What&amp;rsquo;s left is a standard islands and gaps problem.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Conclusion:&lt;/h4&gt;
&lt;p&gt;&lt;br /&gt;As you can see, all three of the above solutions provide the result we were looking for, but do so in a very different style.&amp;nbsp; The&amp;nbsp;&lt;a title="original thread" href="http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/ab90a200-4a1d-4aa3-a085-9d7cd318a76c" target="_blank"&gt;original thread&lt;/a&gt;&amp;nbsp;provides variations of the solutions presented here as well as further discussion.&amp;nbsp; Each of these solutions leverages different SQL Server language constructs and includes different considerations in the final solutions. I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p&gt;Special thanks to Steven, Alejandro, and Tom for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Contributor Bios:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Steven Wang &lt;/strong&gt;has worked with SQL server for more than 10 years. Steven is an active SQL server community participant and speaks at events such as TechEd, CodeCamp, SQL User Group etc.&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;Blog: &lt;a href="http://www.msbicoe.com/"&gt;www.MSBICOE.com&lt;/a&gt;&amp;nbsp;| LinkedIn: &lt;a href="http://www.linkedin.com/pub/steven-wang/1b/ab/b8b"&gt;Steven Wang&lt;/a&gt;&amp;nbsp;| MSDN Profile: &lt;a href="http://social.msdn.microsoft.com/profile/steven%20wang%20-%20shangzhou/?ws=usercard-inline"&gt;Steven Wang - Shangzhou&lt;/a&gt;&lt;u1:p&gt;&lt;/u1:p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alejandro Mesa &lt;/strong&gt;has been working with SQL Server for more than 10 years,&amp;nbsp;being an MVP since 2007.&amp;nbsp; His&amp;nbsp;passion is T-SQL and he is active in both English and Spanish forums under the alias of Hunchback.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tom Cooper &lt;/strong&gt;began his programming career in 1968, began working with database software in 1977, and first worked with Microsoft SQL Server in 1994 (version 4.21).&amp;nbsp; He is now very happily retired.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10346404" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server 2008" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008/" /><category term="SQL Server 2008 R2" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2008+R2/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /><category term="Gaps and Islands" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Gaps+and+Islands/" /><category term="Overlapping Ranges" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Overlapping+Ranges/" /></entry><entry><title>TSQL - Solve it YOUR Way - Text to Speech</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/samlester/archive/2012/08/28/tsql-solve-it-your-way-text-to-speech.aspx" /><id>http://blogs.msdn.com/b/samlester/archive/2012/08/28/tsql-solve-it-your-way-text-to-speech.aspx</id><published>2012-08-28T19:11:00Z</published><updated>2012-08-28T19:11:00Z</updated><content type="html">&lt;h4&gt;Introduction:&lt;/h4&gt;
&lt;p&gt;As part of the blog series&amp;nbsp;&lt;a title="TSQL - Solve it YOUR Way" href="http://blogs.msdn.com/b/samlester/archive/2012/08/25/tsql-pick-your-path-choose-your-desitny-solve-it-your-way.aspx" target="_blank"&gt;TSQL&amp;nbsp;- Solve it YOUR Way&lt;/a&gt;,&amp;nbsp;I will&amp;nbsp;present a topic recently discussed in the Transact-SQL MSDN forum &lt;a title="here." href="http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/170623bc-88b3-4c0f-b887-9e4ba38ba9a5" target="_blank"&gt;here&lt;/a&gt;,&amp;nbsp;followed by three different solutions to this problem supplied by&amp;nbsp;three of the most active and helpful contributors in the forums,&amp;nbsp;Tom Cooper, Naomi Nosonovsky, and Kent Waldrop.&amp;nbsp; More importantly, they have included thoughts as to how they arrived at each solution.&amp;nbsp; By seeing the different solutions along with a glimpse into their thought process, you can compare the different approaches to the solutions and learn from each of them.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;Topic:&amp;nbsp; I am writing a Text to Speech application and want to parse integer values into digits and convert them into the text representation of each digit.&amp;nbsp; Example:&amp;nbsp; Convert 16498 into the string "one six four nine eight".&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Solution #1:&amp;nbsp; Provided by Tom Cooper&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="WordSection1"&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #dddddd; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;" start="1"&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Test Data&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;Declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;InputString&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;10&lt;span style="color: #808080;"&gt;));&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;Insert&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;InputString&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Values &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'164285'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #0000ff;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'1746'&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Solution&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008080;"&gt;InputString&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'0'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Zero '&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'1'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'One '&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'2'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Two '&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'3'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Three '&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'4'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Four '&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&amp;nbsp;&lt;span style="color: #ff0000;"&gt;'5'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Five '&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'6'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Six '&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'7'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Seven '&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'8'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Eight '&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'9'&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'Nine '&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Test&lt;/span&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;strong&gt;Tom's Explanation:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;The reason that I picked this solution is it is simple and easy to understand.&amp;nbsp; That means it is easy to maintain.&amp;nbsp;Maintainability is a very important consideration when developing software.&amp;nbsp; So, for example, let's&amp;nbsp;consider&amp;nbsp;sometime in the future that&amp;nbsp;this problem is extended to include the requirement that the number may have embedded commas, and/or the number may be preceded by a minus sign (-).&amp;nbsp; If the requirement is to remove the comma&amp;rsquo;s and change the minus sign to the word&amp;nbsp; &amp;ldquo;Minus&amp;rdquo;, then you could give this to a junior programmer who could easily understand this code and make the updates.&amp;nbsp; Note, I have changed this slightly from my original answer.&amp;nbsp; I have made the second argument to each REPLACE function call a string constant, not an integer constant.&amp;nbsp; Either way works, but, of course, since REPLACE wants a string there, it is better to give it as a string rather than relying on the implicit conversion that will take place.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Courier New'; font-size: 10pt;"&gt;&lt;span style="color: gray;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;h4&gt;Solution #2:&amp;nbsp; Provided by Naomi Nosonsovsky&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #dddddd; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@NumToText&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TABLE &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;TINYINT&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;&lt;span style="color: #000000;" color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;Word&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;10&lt;span style="color: #808080;"&gt;))&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;-- Create lookup table&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;INSERT&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;INTO&lt;/span&gt; &lt;span style="color: #008080;"&gt;@NumToText&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;VALUES&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;1&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'One'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;2&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Two'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;3&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Three'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;4&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Four'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;5&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Five'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;6&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Six'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;7&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Seven'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;8&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Eight'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;9&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Nine'&lt;/span&gt;&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;0&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'Zero'&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;-- Test values&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;DECLARE&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Value&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;100&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'125790784533'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Output&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;max&lt;/span&gt;&lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;WITH&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;SUBSTRING&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Value&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #008080;"&gt;N&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;AS&lt;/span&gt; &lt;span style="color: #008080;"&gt;[NumberToParse]&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;N&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;number&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;span style="color: #000000;" color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;FROM&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;master&lt;/span&gt;&lt;span style="color: #808080;"&gt;..&lt;/span&gt;&lt;span style="color: #008080;"&gt;spt_values&lt;/span&gt; &lt;span style="color: #008080;"&gt;N&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; &lt;span style="color: #008080;"&gt;N&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;type&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'P'&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #008080;"&gt;N&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;number&lt;/span&gt; &lt;span style="color: #808080;"&gt;BETWEEN&lt;/span&gt; 1&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;AND&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LEN&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;@Value&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;cte2&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;AS &lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Word&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;@NumToText&lt;/span&gt; &lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;INNER&lt;/span&gt; &lt;span style="color: #808080;"&gt;JOIN&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;ON&lt;/span&gt; &lt;span style="color: #008080;"&gt;T&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;Number&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte&lt;/span&gt;&lt;span style="color: #808080;"&gt;.&lt;/span&gt;&lt;span style="color: #008080;"&gt;NumberToParse&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Output&lt;/span&gt; &lt;span style="color: #808080;"&gt;=&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;LTRIM&lt;/span&gt;&lt;span style="color: #808080;"&gt;((&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #008080;"&gt;Word&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FROM&lt;/span&gt; &lt;span style="color: #008080;"&gt;cte2&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;BY&lt;/span&gt; &lt;span style="color: #008080;"&gt;number&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff;"&gt;FOR&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;XML&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;PATH&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;))&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;SELECT&lt;/span&gt; &lt;span style="color: #008080;"&gt;@Output &lt;span style="color: #0000ff;"&gt;AS&amp;nbsp;&lt;span style="color: #008080;" color="#008080"&gt;Result&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="WordSection1"&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;br /&gt;&lt;strong&gt;Naomi's Explanation:&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;I first created a table that contains the mapping/conversion (ex:&amp;nbsp; 1:one, 2:two, etc).&amp;nbsp; Then using the numbers table, I parse the original value into individual digits using common table expressions (CTE's), join that with the conversion/lookup table, and then finally concatenate back using the XML PATH approach in the final @Output parameter.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;Solution #3 - Provided by Kent Waldrop&amp;nbsp;&lt;/h4&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="border: 1px solid #000080; color: #000000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;"&gt;
&lt;div style="background: #000080; padding: 2px 5px; color: #ffffff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold;"&gt;Code Snippet&lt;/div&gt;
&lt;div style="background: #dddddd; overflow: auto; max-height: 300px;"&gt;&lt;ol style="background: #ffffff; margin: 0px 0px 0px 2.5em; padding: 0px 0px 0px 5px;"&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;declare&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;table&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;varchar&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;10&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;);&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #0000ff;"&gt;insert&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;into&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'164285'&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;union&lt;/span&gt; &lt;span style="color: #808080;"&gt;all&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;'0987654321'&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #008000;"&gt;/* ------------------------------------------------&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;This query gets the name of a string of digits.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;(1) "name_List" provides a list of &lt;/span&gt;&lt;span style="color: #008000;"&gt;digit names as a string that is divided into 6-char segments -- a six-char segment &lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;that names each decimal digit.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;(2) "digits" fetches each individual digit of the &lt;/span&gt;&lt;span style="color: #008000;"&gt;input string.&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;(3) "set_Names" fetches the name of each specific digit &lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;(4) the SELECT &lt;/span&gt;&lt;span style="color: #008000;"&gt;clause concatenates together the names obtained from "set_Names" to form the output &lt;/span&gt;&lt;span style="color: #008000;"&gt;string.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008000;"&gt;------------------------------------------------ */&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_4&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_5&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_6&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_7&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_8&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_9&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff00ff;"&gt;coalesce&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;seg_10&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt; &lt;span style="color: #008080;"&gt;@test&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;'zero one two three four five six seven eight nine '&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;name_List&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 2&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 3&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 4&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_4&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 5&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_5&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_6&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 7&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_7&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 8&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_8&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 9&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_9&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;nullif&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;some_String&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;10&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;),&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;''&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digit_10&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;digits&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="color: #808080;"&gt;cross&lt;/span&gt; &lt;span style="color: #808080;"&gt;apply&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;select&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_1&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_1&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_2&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_2&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_3 &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_3&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_4&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_4&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_5&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_5&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_6&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_6&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_7&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_7&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_8&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_8&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_9&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_9&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #ff00ff;"&gt;rtrim&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;substring&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;segments&lt;/span&gt;&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;*&lt;/span&gt;&lt;span style="color: #ff00ff;"&gt;cast&lt;/span&gt;&lt;span style="color: #808080;"&gt;(&lt;/span&gt;&lt;span style="color: #008080;"&gt;digit_10&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #808080;"&gt;)&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; 1&lt;span style="color: #808080;"&gt;,&lt;/span&gt; 6&lt;span style="color: #808080;"&gt;))&lt;/span&gt; &lt;span style="color: #808080;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;' '&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;seg_10&lt;/span&gt;&lt;/li&gt;
&lt;li style="background: #f3f3f3;"&gt;&lt;span style="color: #008080;"&gt;) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; &lt;span style="color: #008080;"&gt;set_Names;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;strong&gt;Kent's Explanation:&amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I used the APPLY operators because it is a method of clarifying the code with which I am comfortable.&amp;nbsp; Frequently, I will initially build a query in-line and then push complexity down into APPLY operators.&amp;nbsp; This is a design alternative to use of CTEs or derived tables.&amp;nbsp; However, if I am working with either Oracle or DB2 I tend toward the CTEs because the APPLY operator does not exist for either of these dialects.&amp;nbsp; Notice how well the CROSS APPLY partitions the calculations into more easily understandable portions.&amp;nbsp; Of course the same thing could be done with CTEs or derived tables.&lt;/p&gt;
&lt;p&gt;There are a number of bookend operations that can be used for conditional processing. The most widely used combination is the CASE structure.&amp;nbsp; Other potentials bookends include the use of NULLIF and COALESCE, the SIGN function and the IIF function if you using SQL Server 2012.&amp;nbsp; In this case I chose to use the NULLIF and COALESCE bookends for conditional processing &amp;ndash; but why?&lt;/p&gt;
&lt;p&gt;Look again at the structure of the code.&amp;nbsp; Notice that the COALESCE function is in the SELECT clause and that the NULLIF is in one of the CROSS APPLY clauses.&amp;nbsp; By using these two operations to bookend my conditional code I can divide my code across a big boundary like this in order to reveal each distinct portion of the code.&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;Conclusion:&amp;nbsp;&lt;/h4&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;As you can see, all three of the above solutions provide the result we were looking for, but do so in a very different style.&amp;nbsp; The &lt;a title="original thread  " href="http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/170623bc-88b3-4c0f-b887-9e4ba38ba9a5" target="_blank"&gt;original thread&lt;/a&gt; provides variations of the solutions presented here as well as one additional solution using a CASE statement.&amp;nbsp; Each of these solutions leverages different SQL Server language constructs and&amp;nbsp;includes different considerations in the final solutions.&amp;nbsp;I hope that you are able to learn a lot by trying out the problem yourself and then reading through the additional solutions.&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;br /&gt;Special thanks to Tom, Naomi, and Kent for their valuable forums contribution and for contributing to this series!&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&lt;br /&gt;Hope that helps,&lt;br /&gt;Sam Lester (MSFT)&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;Contributor Bios:&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;Tom Cooper&lt;/strong&gt; &lt;/strong&gt;began his programming career in 1968, began working with database software in 1977, and first worked with Microsoft SQL Server in 1994 (version 4.21).&amp;nbsp; He is now very happily retired.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Naomi Nosonovsky&lt;/strong&gt;, Senior Software Developer, has more than 15 years of enterprise experience in analysis, design, development and implementation of high-performance client/server data management solutions. She is a Personality of the Year for 2008, 2009, 2010 and 2011 at www.universalthread.com in .NET, SQL Server &amp;amp; VFP categories. She is also an All Star contributor/MCC Community Contributor at forums.asp.net and MSDN T-SQL forum.&amp;nbsp; She also actively blogs at &lt;a href="http://blogs.lessthandot.com/index.php/All/?disp=authdir&amp;amp;author=218"&gt;http://blogs.lessthandot.com/index.php/All/?disp=authdir&amp;amp;author=218&lt;/a&gt; and &lt;a href="http://beyondrelational.com/members/naomi/modules/2/posts.aspx?Tab=16"&gt;http://beyondrelational.com/members/naomi/modules/2/posts.aspx?Tab=16&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kent Waldrop&lt;/strong&gt; started working with Sybase Transact SQL in 1989 as an application developer and continued working with Sybase until 1995 when SQL Server 6 came out.&amp;nbsp; At that time, he became a Microsoft SQL Server database administrator and has continued to work with Microsoft SQL Server ever since.&amp;nbsp; Currently he is a database architect working with Microsoft SQL Server, Oracle and UDB/DB2.&lt;/p&gt;
&lt;p style="line-height: normal; margin-bottom: 0pt;" class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10344329" width="1" height="1"&gt;</content><author><name>Samuel Lester - MSFT</name><uri>http://blogs.msdn.com/samlester9_4000_hotmail.com/ProfileUrlRedirect.ashx</uri></author><category term="TSQL" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL/" /><category term="Microsoft SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Microsoft+SQL+Server/" /><category term="Database" scheme="http://blogs.msdn.com/b/samlester/archive/tags/Database/" /><category term="SQL Server 2012" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server+2012/" /><category term="SQL Server" scheme="http://blogs.msdn.com/b/samlester/archive/tags/SQL+Server/" /><category term="TSQL - Solve it YOUR Way" scheme="http://blogs.msdn.com/b/samlester/archive/tags/TSQL+_2D00_+Solve+it+YOUR+Way/" /></entry></feed>