<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://beyondrelational.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Leonid's Blog</title><link>http://beyondrelational.com/blogs/leonid/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Solution for challenge #5</title><link>http://beyondrelational.com/blogs/leonid/archive/2009/05/11/solution-for-challenge-5.aspx</link><pubDate>Mon, 11 May 2009 06:02:00 GMT</pubDate><guid isPermaLink="false">6e5011fa-7db5-4df3-bb79-9085c1d333b3:106</guid><dc:creator>Leonid Koyfman</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://beyondrelational.com/blogs/leonid/rsscomments.aspx?PostID=106</wfw:commentRss><comments>http://beyondrelational.com/blogs/leonid/archive/2009/05/11/solution-for-challenge-5.aspx#comments</comments><description>&lt;p style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;mso-add-space:auto;" class="MsoNormalCxSpFirst"&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;This is my solution for challenge #5:&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; @filter &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;id &lt;span style="color:blue;"&gt;INT&lt;/span&gt; &lt;span style="color:blue;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; data &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;32&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @filter &lt;span style="color:gray;"&gt;(&lt;/span&gt;data&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;sql,performance&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @filter &lt;span style="color:gray;"&gt;(&lt;/span&gt;data&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;profiler&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @filter &lt;span style="color:gray;"&gt;(&lt;/span&gt;data&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;table,performance,view&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;DECLARE&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; @blog &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;id &lt;span style="color:blue;"&gt;INT&lt;/span&gt; &lt;span style="color:blue;"&gt;IDENTITY&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:blue;"&gt;name&lt;/span&gt; &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;20&lt;span style="color:gray;"&gt;),&lt;/span&gt; tags &lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;20&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @blog &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;name&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;post 1&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;sql,profiler,table&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @blog &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;name&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;post 2&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;sql,performance&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @blog &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;name&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;post 3&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;profilter&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;insert&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;into&lt;/span&gt; @blog &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;name&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;values&lt;/span&gt; &lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;post 4&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;view,table&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;;with&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; cte&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;as&lt;/span&gt;&lt;span style="font-size:9pt;color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;(&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt; n&lt;span style="color:gray;"&gt;=&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;tag&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:4;"&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; &lt;/span&gt;&lt;span style="color:blue;"&gt;when&lt;/span&gt; 0 &lt;span style="color:blue;"&gt;then&lt;/span&gt; tags &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:4;"&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; &lt;/span&gt;&lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;)-&lt;/span&gt;1&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;end&lt;/span&gt; &lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;txt&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;len&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tags&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; @blog&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;union&lt;/span&gt; &lt;span style="color:gray;"&gt;all&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;select&lt;/span&gt;&amp;nbsp;n&lt;span style="color:gray;"&gt;=&lt;/span&gt;n&lt;span style="color:gray;"&gt;+&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;tag&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;txt&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:3;"&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&gt;&lt;span style="color:blue;"&gt;when&lt;/span&gt; 0 &lt;span style="color:blue;"&gt;then&lt;/span&gt; txt&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:3;"&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&gt;&lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;)-&lt;/span&gt;1&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;end&lt;/span&gt; &lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;txt&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;len&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;txt&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;from&lt;/span&gt; cte&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;where&lt;/span&gt; txt&lt;span style="color:gray;"&gt;!=&lt;/span&gt;tag &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;)&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;select&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;f&lt;span style="color:gray;"&gt;.&lt;/span&gt;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;f&lt;span style="color:gray;"&gt;.&lt;/span&gt;data&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;b&lt;span style="color:gray;"&gt;.&lt;/span&gt;[name]&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;b&lt;span style="color:gray;"&gt;.&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;RELEVANCE&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;(*)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;cte &lt;span style="color:gray;"&gt;join&lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@blog b &lt;span style="color:blue;"&gt;on&lt;/span&gt; b&lt;span style="color:gray;"&gt;.&lt;/span&gt;id&lt;span style="color:gray;"&gt;=&lt;/span&gt;cte&lt;span style="color:gray;"&gt;.&lt;/span&gt;id &lt;span style="color:gray;"&gt;join&lt;/span&gt;&lt;span style="mso-tab-count:1;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@filter f &lt;span style="color:blue;"&gt;on&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;cte&lt;span style="color:gray;"&gt;.&lt;/span&gt;tag&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt; &lt;span style="color:gray;"&gt;,&lt;/span&gt; &lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;f&lt;span style="color:gray;"&gt;.&lt;/span&gt;data&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;)&amp;gt;&lt;/span&gt;0&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;group&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;by&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;f&lt;span style="color:gray;"&gt;.&lt;/span&gt;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;f&lt;span style="color:gray;"&gt;.&lt;/span&gt;data&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;b&lt;span style="color:gray;"&gt;.&lt;/span&gt;[name]&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;b&lt;span style="color:gray;"&gt;.&lt;/span&gt;tags&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;order&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;by&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:fuchsia;"&gt;count&lt;/span&gt;&lt;span style="color:gray;"&gt;(*)&lt;/span&gt;&lt;span style="color:blue;"&gt;desc&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;b&lt;span style="color:gray;"&gt;.&lt;/span&gt;[name]&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;To solve this challenge I normalized the @blog table and then checked how many times each tag in the normalized table exists in the [data] field in the @filter table.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;By normalizing @blog table I mean bringing it to the form like&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;id&amp;nbsp;&amp;nbsp;tag&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;--&amp;nbsp; ---&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;sql&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;profiler&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;table&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;sql&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;performance&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;profilter&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;view&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;table&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;To achive this we need to split delimited strings in the [tags] field for each record in the @blog table. This task can be done in a number of ways but I decided to use common table expression (CTE). CTEs are available in SQL Server 2005 and up, so it&amp;#39;s not going to work in SQL Server 2000. I used a recursive form of CTE. It allowed me to solve the challenge in one query without using a loop or a cursor.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;Recursive CTE consists of 2 parts integrated by UNION ALL operator: anchor member and recursive member. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;To show how it works I added recursions counter &lt;/span&gt;&lt;span style="color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;n&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt; to my original code and limited it to 2 as in the following:&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:9pt;color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;;&lt;/span&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;with&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; cte&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;as&lt;/span&gt;&lt;span style="font-size:9pt;color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;(&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;select&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:1;"&gt; &lt;/span&gt;n&lt;span style="color:gray;"&gt;=&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tag&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;&lt;span style="color:blue;"&gt;when&lt;/span&gt; 0 &lt;span style="color:blue;"&gt;then&lt;/span&gt; tags &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;&lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;)-&lt;/span&gt;1&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;end&lt;/span&gt; &lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;txt&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;tags&lt;span style="color:gray;"&gt;,&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;len&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;tags&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; @blog&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;union&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:gray;"&gt;all&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;select&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; n&lt;span style="color:gray;"&gt;=&lt;/span&gt;n&lt;span style="color:gray;"&gt;+&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;id&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tag&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;case&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;txt&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;&lt;span style="color:blue;"&gt;when&lt;/span&gt; 0 &lt;span style="color:blue;"&gt;then&lt;/span&gt; txt&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-tab-count:2;"&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;&lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;)-&lt;/span&gt;1&lt;span style="color:gray;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;end&lt;/span&gt; &lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;txt&lt;span style="color:gray;"&gt;=&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;substring&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;charindex&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;txt&lt;span style="color:gray;"&gt;,&lt;/span&gt;2&lt;span style="color:gray;"&gt;)+&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;&lt;span style="color:fuchsia;"&gt;len&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;txt&lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;from&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; cte&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;where&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; n&lt;span style="color:gray;"&gt;&amp;lt;&lt;/span&gt;2&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;)&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;select&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:gray;"&gt;*&lt;/span&gt; &lt;span style="color:blue;"&gt;from&lt;/span&gt; cte&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;order&lt;/span&gt;&lt;span style="font-size:9pt;font-family:&amp;#39;Courier New&amp;#39;;"&gt; &lt;span style="color:blue;"&gt;by&lt;/span&gt; n&lt;span style="color:gray;"&gt;,&lt;/span&gt;id&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;This code generates the result set below:&lt;/span&gt; &lt;br /&gt;&lt;span style="color:gray;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;n&amp;nbsp;&amp;nbsp;&amp;nbsp; id&amp;nbsp;&amp;nbsp; tag&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;txt&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;--&amp;nbsp;&amp;nbsp; --&amp;nbsp;&amp;nbsp;----------&amp;nbsp;&amp;nbsp;&amp;nbsp;--------------&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; sql&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; profiler,table&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp; sql&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; performance&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp; profilter&amp;nbsp;&amp;nbsp; profilter&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp; view&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; table&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; profiler&amp;nbsp;&amp;nbsp;&amp;nbsp; table&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp; performance performance&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp; profilter&amp;nbsp;&amp;nbsp; profilter&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:9pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;mso-fareast-font-family:Calibri;"&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp; table&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; table&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;In each iteration 3 things happen:&lt;/span&gt; &lt;/p&gt;
&lt;ol style="margin-top:0in;"&gt;
&lt;li style="mso-list:l0 level1 lfo1;tab-stops:list .5in;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;We check the delimited string for a delimiter and if it exists retrieve the leftmost item in that string&lt;/span&gt;&lt;/li&gt;
&lt;li style="mso-list:l0 level1 lfo1;tab-stops:list .5in;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;Create a new delimited string of tags without the retrieved item and the following delimiter&lt;/span&gt;&lt;/li&gt;
&lt;li style="mso-list:l0 level1 lfo1;tab-stops:list .5in;" class="MsoNormalCxSpMiddle"&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;Accumulate results in CTE&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;The only difference is that anchor member queries @blog table and recursive member queries CTE itself. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;It&amp;#39;s important to tell the CTE when to stop the recursion.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;font-family:Arial;"&gt;In our case we can stop when the number of iterations exceeds the maximum number of delimiters in tags field values (2 commas in the string &amp;lsquo;table,performance,view&amp;rsquo; in the given test data).&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;On other hand, as we can see in the output above, when the splitting completed the values in the tag and txt fields are the same.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;So in my solution I decided to use it in a where clause of the recursive member in CTE as a stop point of recursion:&lt;/span&gt;&lt;span style="color:red;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;where txt != tag&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;It also reduces the number of rows to be processed in each iteration.&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;Then we join cte result to the&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt; @filter&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt; table using&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&amp;nbsp;join @filter f on charindex(&amp;#39;,&amp;#39;+cte.tag+&amp;#39;,&amp;#39; , &amp;#39;,&amp;#39;+f.data+&amp;#39;,&amp;#39;)&amp;gt;0&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;Here we take only those records from the @filter table where we have the [tag] value from the cte presented as an item in the delimited string in the [data] field.&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;I surrounded field values with the delimiters to avoid partial matches, when [tag]&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;value is just a part of the item.&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;The pitfall would be to use just&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:10pt;color:blue;font-family:&amp;#39;Courier New&amp;#39;;"&gt;charindex(cte.tag ,f.data)&amp;gt;0&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt; ,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;which might cause relevance miscounts.&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;The potential problem is not obvious from the test data that we were provided with.&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;Let&amp;#39;s look at an example when we have &amp;quot;TAB&amp;quot; value as a tag and &amp;quot;profiler,TABle&amp;quot;, &amp;quot;daTABase,profiler&amp;quot;, &amp;quot;performance,TAB,profiler&amp;quot; values in the [data] field.&lt;/span&gt;&lt;span style="color:black;font-family:&amp;#39;Courier New&amp;#39;;"&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;We do not want to match the tag &amp;quot;TAB&amp;quot; with the strings &amp;quot;profiler,TABle&amp;quot; or daTABase,profiler&amp;quot;. Only the records with the string where &amp;quot;tab&amp;quot; is an item like &amp;quot;x,TAB,xx&amp;quot; or &amp;quot;TAB,xx&amp;quot; or &amp;quot;x,TAB&amp;quot; should be included (&amp;quot;performance,TAB,profiler&amp;quot; in my example.)&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;The other way would be to normalize both @blog and @filter table and use regular joins as in the &lt;a href="http://beyondrelational.com/blogs/tc/archive/2009/05/08/tsql-challenge-5-winners.aspx"&gt;&lt;span style="color:windowtext;text-decoration:none;text-underline:none;"&gt;&lt;span style="mso-field-code:&amp;#39; HYPERLINK &amp;#39;http;"&gt;&lt;span style="text-decoration:underline;"&gt;&lt;span style="color:blue;"&gt;Rui&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:12pt;color:windowtext;font-family:&amp;#39;Times New Roman&amp;#39;;text-decoration:none;text-underline:none;"&gt; &lt;/span&gt;&lt;span style="color:black;text-decoration:none;text-underline:none;"&gt;Carvalho&lt;/span&gt;&lt;/a&gt; &amp;rsquo;s solution.&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:11pt;color:black;font-family:Arial;"&gt;And the rest of the code is just a join to @blog table to get [name] and [tags] and count of the relevance.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://beyondrelational.com/aggbug.aspx?PostID=106" width="1" height="1"&gt;</description></item><item><title>Blog Inaugural Post</title><link>http://beyondrelational.com/blogs/leonid/archive/2009/05/08/blog-inaugural-post.aspx</link><pubDate>Fri, 08 May 2009 18:35:00 GMT</pubDate><guid isPermaLink="false">6e5011fa-7db5-4df3-bb79-9085c1d333b3:92</guid><dc:creator>Leonid Koyfman</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://beyondrelational.com/blogs/leonid/rsscomments.aspx?PostID=92</wfw:commentRss><comments>http://beyondrelational.com/blogs/leonid/archive/2009/05/08/blog-inaugural-post.aspx#comments</comments><description>&lt;h4&gt;&lt;br /&gt;Welcome to my blog. &lt;/h4&gt;
&lt;p&gt;I&amp;#39;m Leonid Koyfman, SQL Server Developer.&lt;br /&gt;I&amp;#39;ve started this blog so I can share technologies and techniques for data processing and presenting information.&lt;br /&gt;This blog focused on SQL Server content but I do have other interests in data visualization, Excel, MS Office automation with VBA and in delivering all kind of reporting solutions.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://beyondrelational.com/aggbug.aspx?PostID=92" width="1" height="1"&gt;</description></item></channel></rss>