<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.conchango.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>Jim 2.0</title><link>http://blogs.conchango.com/jamespipe/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>SQL tutorials and learning resources</title><link>http://blogs.conchango.com/jamespipe/archive/2007/11/14/SQL-tutorials-and-learning-resources.aspx</link><pubDate>Wed, 14 Nov 2007 16:26:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:9055</guid><dc:creator>James.Pipe</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/9055.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=9055</wfw:commentRss><description>&lt;p&gt;Following a few requests, here are some sites you may find useful for supporting your SQL learning:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;General&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.stickyminds.com/"&gt;http://www.stickyminds.com/&lt;/a&gt;&amp;nbsp;&lt;br /&gt;&lt;a href="http://www.thefreecountry.com/documentation/onlinesql.shtml"&gt;http://www.thefreecountry.com/documentation/onlinesql.shtml&lt;/a&gt;&amp;nbsp;(free online tutorials)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;T-SQL&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;font color="#606420"&gt;&lt;a href="http://sqlcourse.com/"&gt;http://sqlcourse.com/&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;&amp;nbsp;(free online tutorial)&lt;br /&gt;&lt;a href="http://www.w3schools.com/sql/default.asp"&gt;http://www.w3schools.com/sql/default.asp&lt;/a&gt;&amp;nbsp;(free online tutorial)&lt;br /&gt;&lt;a href="http://sqlzoo.net/"&gt;http://sqlzoo.net/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/"&gt;http://www.sqlservercentral.com/&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;PL/SQL&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.orafusion.com/"&gt;http://www.orafusion.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ora-00937.ora-code.com/"&gt;http://ora-00937.ora-code.com/&lt;/a&gt;&amp;nbsp;(Oracle error codes)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Syntax&amp;nbsp;differences between T-SQL and PL/SQL&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm"&gt;http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;If I come across any others I&amp;#39;ll add them&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=9055" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL_2F00_SQL/default.aspx">PL/SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL-SQL/default.aspx">PL-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>SQL: Using the Trim function to remove white space from a field</title><link>http://blogs.conchango.com/jamespipe/archive/2007/08/14/SQL_3A00_-A-49-character-long-_2700_empty_2700_-field_3F00_.aspx</link><pubDate>Tue, 14 Aug 2007 15:19:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:8116</guid><dc:creator>James.Pipe</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/8116.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=8116</wfw:commentRss><description>&lt;p&gt;Today I was looking at a table with an apparantly empty column and discovered that the field is actually populated with blank spaces - Fortunately this field is of no interest to me and I noticed it purely by chance when I pasted an extract of the dat into excel and happened to notice the cell was unusually wide when I formatted the sheet. Anyway, it reminded me of an issue that is is often worth looking out for of trailing (or I suppose preceeding) spaces.&lt;/p&gt;&lt;p&gt;&amp;nbsp;Fortunately this is easily solved with the trim function, which will remove white spaces from a field&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;SELECT&amp;nbsp;&amp;nbsp;TRIM&lt;/span&gt;(fieldname)&lt;br /&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:blue;"&gt;LTRIM&lt;/span&gt;(fieldname)&lt;br /&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:blue;"&gt;RTRIM&lt;/span&gt;(fieldname)&lt;br /&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:blue;"&gt;LTRIM&lt;/span&gt;(&lt;span style="color:blue;"&gt;RTRIM&lt;/span&gt;(fieldname))&lt;br /&gt;&lt;span style="color:blue;"&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tablename&lt;/p&gt;&lt;p&gt;Depending on the particular &amp;#39;flavour&amp;#39; of SQL being used:&lt;br /&gt;&lt;span style="color:blue;"&gt;TRIM&lt;/span&gt;() will remove both leading and trailing white spaces;&lt;br /&gt;&lt;span style="color:blue;"&gt;LTRIM&lt;/span&gt;() removes leading white spaces (i.e. from the beginning of&amp;nbsp;a string);&lt;br /&gt;&lt;span style="color:blue;"&gt;RTRIM&lt;/span&gt;() removes trailing white space (i.e. from the end of a string);&lt;br /&gt;If &lt;span style="color:blue;"&gt;TRIM&lt;/span&gt;() is not supported, then &lt;span style="color:blue;"&gt;LTRIM&lt;/span&gt;(&lt;span style="color:blue;"&gt;RTRIM&lt;/span&gt;()) will achieve the same result.&lt;/p&gt;&lt;p&gt;As I said, this is a useful way to get rid of pesky additional spaces, however just because it can be done, it does not necessarily mean it should be done, since additional functions such as this have a cost in terms of performance to the query. One temptation is to apply the function to every field you select in a statement, but this is not a good idea, instead simply bare it in mind as a useful trick for when it is necessary to remove these white spaces.&lt;/p&gt;&lt;p&gt;&amp;nbsp;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=8116" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL_2F00_SQL/default.aspx">PL/SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Formatting+code/default.aspx">Formatting code</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/LTRIM/default.aspx">LTRIM</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/TRIM/default.aspx">TRIM</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/RTRIM/default.aspx">RTRIM</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/White+space/default.aspx">White space</category></item><item><title>SQL Quick Tip: Using Top N to browse a database</title><link>http://blogs.conchango.com/jamespipe/archive/2007/08/09/SQL-Quick-Tip_3A00_-Using-Top-N-to-browse-a-database.aspx</link><pubDate>Thu, 09 Aug 2007 22:23:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:8062</guid><dc:creator>James.Pipe</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/8062.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=8062</wfw:commentRss><description>&lt;p&gt;If you ever need to browse through a database, and dip in and out of tables to see what the data looks like, but you have very little data to go on, then you will be aware that simply running a &lt;span style="color:blue;"&gt;select *&lt;/span&gt; against each table can be a time consuming and inefficient process. I am in this situation currently with a database that has &lt;font size="2"&gt;no enforced referential integrity between it&amp;#39;s tables &lt;/font&gt;that I am having to explore (foreign keys exist but aren&amp;#39;t enforced at the database level).&lt;/p&gt;&lt;p&gt;In such situations, I like to use the top N command to return just a portion of the data. This gives me enough to get a feel for what the data in a table looks like, but doesn&amp;#39;t waste time trying to return all the rows. The following will return the top N rows for T-SQL and PL/SQL respectively:&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;u&gt;T-SQL&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;SELECT&amp;nbsp;&amp;nbsp;TOP &lt;/span&gt;100 field&lt;br /&gt;&lt;span style="color:blue;"&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;tablename&lt;/p&gt;&lt;p&gt;&lt;u&gt;PL/SQL&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue;"&gt;SELECT&amp;nbsp;&amp;nbsp;&lt;/span&gt;field&lt;br /&gt;&lt;span style="color:blue;"&gt;FROM&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;tablename&lt;br /&gt;&lt;span style="color:blue;"&gt;WHERE&amp;nbsp;&amp;nbsp;&lt;/span&gt;rownum &amp;lt;= 100&lt;/p&gt;&lt;p&gt;Obviously the top N rows will depend on what column the ordering is based on, and as above will run on whatever the default is. You can specify an&amp;nbsp;&lt;span style="color:blue;"&gt;order by&lt;/span&gt; clause, although this will increase the time taken to run the query.&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=8062" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL_2F00_SQL/default.aspx">PL/SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Rownum/default.aspx">Rownum</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Top+N/default.aspx">Top N</category></item><item><title>Automatically format your SQL statements</title><link>http://blogs.conchango.com/jamespipe/archive/2007/08/09/Automatically-format-your-SQL-statements.aspx</link><pubDate>Thu, 09 Aug 2007 18:26:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:8055</guid><dc:creator>James.Pipe</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/8055.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=8055</wfw:commentRss><description>&lt;p&gt;A colleague forwarded me this link today, which I thought would be beneficial to anyone who has to write a lot of SQL statements.&lt;/p&gt;&lt;p&gt;The tool&amp;nbsp;will automatically format the statements to &amp;#39;beautify&amp;#39; them, so no more excuses for &amp;#39;ugly&amp;#39; code! Check it out &lt;a href="http://www.wangz.net/gsqlparser/sqlpp/sqlformat.htm" target="_blank"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=8055" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL_2F00_SQL/default.aspx">PL/SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Formatting+code/default.aspx">Formatting code</category></item><item><title>Using TFS for Agile Testing</title><link>http://blogs.conchango.com/jamespipe/archive/2007/08/06/Using-TFS-for-Agile-Testing.aspx</link><pubDate>Mon, 06 Aug 2007 15:19:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:7985</guid><dc:creator>James.Pipe</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/7985.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=7985</wfw:commentRss><description>&lt;p&gt;Recently I was sent an email asking me for some advice on using TFS with the scrum for team systems plug-in for managing testing tasks and defect tracking on an agile project. I thought the answers might be useful to others, so I have posted them here:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Basically I want to use VSTS / TFS (with the Conchango template) to manage functional testing as well as unit testing. Our project test&amp;nbsp;team&amp;nbsp;will own the functional testing of the&amp;nbsp;application releases both in the scope of a Sprint and the scope of System Test and User Acceptance Testing.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;Generally speaking around managing specific testing, as I&amp;#39;m sure you already have set up, testing tasks can be entered as sprint backlog items assigned to the appropriate tester. Test cases/scripts (depending on your terminology I refer to the sql queries to be executed) can be stored in source control so a record is kept of them and version history can be tracked. Regarding unit testing, it has always been my understandin in agile that this is the developers responsibility as part of ensuring their code is ready to go to test. They can however store unit tests in source control&amp;nbsp; and if desired I would suggest adding a field to the release note on the wiki to confim that developers have successfully carried out unit testing.&lt;/em&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How do you typically use the status types available: Decomposed, Deferred, Deleted, In Progress, Not Done? I&amp;rsquo;m trying to relate these values to what I&amp;rsquo;m used to: New, Re-Open, Assigned, Ready for Re-Test, Fixed, or Closed.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;You&amp;#39;re right in that the status types are simplistic, but you can relate them to the values you are used to:&lt;/em&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;When a defect/bug is created it has a status of &amp;#39;Not done&amp;#39; and it remains like this until work is started on it, at which time the status should be changed to &amp;#39;in progress&amp;#39; - I suppose this is the equivalent of &amp;#39;new&amp;#39;, although this is not used because otherwise we would have to define how long is a bug new for and when does it get updated to not being new, who&amp;#39;s job would that be etc.&lt;br /&gt;&lt;/em&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Re-open does not match up, however I&amp;#39;ve never encountered a scenario where I would need this. Generally if a defect is closed off and then reoccurs a new defect would be raised, and you could link to the previous one if you wanted to maintain a record that this has happened before. If it turns out the defect was never fixed properly, you can retrieve it from the done list and change the status back. The history tab would keep a record that it had changed status back and you could leave a comment if desired.&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;A defect is always assigned to someone, therefore this is not a status of the defect. It is either assigned to someone &amp;#39;not done&amp;#39; or assigned to them and &amp;#39;in progress&amp;#39;&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Ready for re-test also is defined by the owner of the item. When a developer finishes fixing a defect, the status remains &amp;#39;in progress&amp;#39; and they assign it to an appropriate tester. Any defect therefore assigned to a tester with a status of &amp;#39;in progress&amp;#39; can be assumed to be ready for test. If a tester has a defect with a status of &amp;#39;not done&amp;#39;, it is likely a defect which has been raised but not assigned to a developer yet. This is best practice, but of course sometimes people forget to update this status field, and comments can be added to the history tab to help keep a record.&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;When a defect is fixed and retesting has confirmed this, the status can be changed to &amp;#39;done&amp;#39;, at which point it is also closed. Fixed therefore also equates to closed. An item may also be closed if it is deleted (perhaps the defect has already been raised, or turns out not to have been a defect, etc). I also like to add a comment to the histroy tab to state I have retested the defect, in case the status is changed accidentally.&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;An item may be deferred although this shouldn&amp;#39;t happen regularly. Situations where it might be necessary include when an area of functionality is parked therefore defects raised against it also need to be parked, so the status is set to deferred so that when development resumes these issues are not forgotten about. Alternatively, a defect may not be resolvable at the current time due to circumstances outside of the team&amp;#39;s control.&lt;br /&gt;&lt;/em&gt;&lt;/li&gt;&lt;li&gt;&lt;em&gt;Decompossed I must confess is new to me as I don&amp;#39;t have it available on the version of TFS I&amp;#39;m using.&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;I usually collect details such as how to reproduce the bug, comments / responses from developers, etc.&amp;nbsp;In TFS,&amp;nbsp; is there a difference between &amp;ldquo;description&amp;rdquo; (owned by testers) and &amp;ldquo;comments&amp;rdquo; (shared between testers / developers)?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;Regarding capturing details, the description field is designed to hold much more detailed information than the comments field and is intended to give the developer enough information (perhaps combined with some screen shots attached) to fix the defect. This field is not necessarily owned by the tester, since anyone can raise a defect and therefore enter a description in this field. Furthermore, I may sometimes not know enough detail to fully populate this field, and the defect may be temporarily assigned to a BA to make a call on something. They will then update the description before passing this on to the appropriate developer. Alternatively, it may be assigned to a devloper for investigation, who may then update this field and pass it on to another developer for resolution. The history tab is used for much smaller comments, such as &amp;#39;update the config file&amp;#39;, &amp;#39;ready for testing&amp;#39;, and &amp;#39;retested and passed in test&amp;#39;, etc.&lt;/em&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Capturing the resolution in a defined field is very helpful for researching similar defects. Does TFS have the ability to do that?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;Capturing the resolution is a good point and TFS does not provide a clear way to do this, although it can still&amp;nbsp; be done if required. As above, detail about the defect and what the solution was can be added to the description field, or as a comment. In the &amp;#39;area&amp;#39; field you can select the specific area of the project that the defect relates to, so that you can review the defect by area at a later date should anpther defect arise in the same area. Furthermore, you can link defects together, or to any sprint backlog or product backlog item, so there is always that relationship to refer to.&lt;/em&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Is there a way to automate escalation, notifications, etc. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;TFS can notify you via email anytime one of your sprint backlog items (and defects are SBIs) is changed or assigned to you: In the &amp;#39;Team Explorer&amp;#39; pane, right click on your project and select &amp;#39;Project Alerts&amp;#39;. Check the first box; &amp;#39;My work items are changed by others&amp;#39;. and enter an email address to send to.&lt;/em&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;It seems like the tool is focused on completing everything within a sprint (including sprint backlog items of type &amp;ldquo;bug&amp;rdquo;) by the end of the sprint. Is there a robust way to manage / report on items that might hang around for a while (across multiple sprints or releases)?&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;em&gt;you are absolutely correct that the tool is focussed on the sprint, as it should be, since it is intended that all issues are resolved within the sprint they are raised. This is the ideal though and it is recognised that this often is not the case, and each defect item has a sprint number so you can review by sprint the outstanding items. There probably isn&amp;#39;t a system to manage these which is as &amp;#39;robust&amp;#39; as you are used to, however I would argue it isn&amp;#39;t required because other aspects of the agile methodolgy make it unnecessary to rely on a tool to do this for you.&lt;/em&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Beyond answering these questions above I also want to make the point that most important are the principles of constant communication and participation; the daily scrum is an opportunity for big ticket issues and blocker to be raised, which can create an awareness for a subsequent meeting later in the say of required. It is also recommended to have regular defect and feedback meetings (currently we run them twice a week, although they can be daily if required), which the majority of the team should attend, during which outstanding defects are discussed along with progress on these. New defect and feedback are also discussed and a decision is made on priority, who to assign to and any clarification is requested/given. This facet of agile testing impacts all of the questions above in a number of ways&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;Report tracking on outstanding defects from previous sprints does not need to be as robust because defects are constantly talked about. You will quickly realise if a defect is still being discussed in the regular defect meetings after two weeks, a sprint, two sprints, etc&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;Escalation and notification is more efectively communicated by the formal daily scrum and by the constant communication between team members&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;When a bug is raised it is not done in isolation and then passed to a developer with no direct communication. There is two way communication and often collaboration on identifying, troubleshooting or pin-pointing the defect and developers are encouraged to have a conversation with the tester to understand the defect fully. The regular defect meetings also provide a forum for th&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Generally tracking the number of outstanding items, the status of these items and recognising similar defects/relating these to similar defects is also supported in this non-structured way. It may sound somewat flaky in comparison to a traditional approach to testing, however when you take into account that we work sprint by sprint, it is expected that you have only the one sprint&amp;#39;s worth of items to deal with (already acknowledged that in reality this is not exactly the case), therefore it is quite possible to maintain a bulk of this knowledge in the team&amp;#39;s collective head. I generally know the defects I currently have open, those that are ready for retesting and the big ticket items still waiting to be resolved. For when I do need a reminder I find the reporting on TFS adequate enough to provide me the detail I need. Similarly, if a particular defect arises again, especially if it is a big one, then in my experience someone on the team will realise this and together we are able to find the previous solution.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;Put most bluntly, quite a lot of the time, we don&amp;#39;t need a formal tool to give us the information about the current state of things; we just know. This is because everyone is involved everyday in constant communication about the project.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;There are a number of queries you may want to consider setting up under &amp;#39;team queries&amp;#39; in the &amp;#39;team explorer&amp;#39; pane. If you don&amp;#39;t have permission to create a team query, then you can create them under &amp;#39;My queries&amp;#39;. Currently I have set up among others the following:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;div&gt;All active defects (Only defects in-progress or not done)&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;All active defects - High/Medium/Low priority (one for each)&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;All defects raised today (useful for the defect meetings; I actually have this set up to show the last 3 days since our meetings are twice weekly, not daily)&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;It should be possible to set up queries to show this sprint&amp;#39;s defects, defects from previous sprints, and any number of other views required. I am happy to help if you have any questions about how to do this.&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=7985" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Agile+Testing/default.aspx">Agile Testing</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Scrum/default.aspx">Scrum</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Team+Foundation+Server/default.aspx">Team Foundation Server</category></item><item><title>SQL Server 2005: Passing variables into an OPENQUERY argument</title><link>http://blogs.conchango.com/jamespipe/archive/2007/06/28/SQL-Server-2005_3A00_-Passing-variables-into-an-OPENQUERY-argument.aspx</link><pubDate>Thu, 28 Jun 2007 16:32:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:7481</guid><dc:creator>James.Pipe</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/7481.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=7481</wfw:commentRss><description>&lt;p&gt;Today I ran into a blocker when trying to do this. Having spent a reasonable amount of time taking all of my sql statements out of the OPENQUERY argument and putting them into a string variable I then found it didn&amp;#39;t work. The reason (from &lt;a href="http://msdn2.microsoft.com/en-us/library/ms188427.aspx" target="_blank"&gt;BOL&lt;/a&gt;) it turns out is that, and I quote; &amp;quot;OPENQUERY does not accept variables for its arguments.&amp;quot;&lt;/p&gt;&lt;p&gt;Why this is the case I haven&amp;#39;t been able to find out so far, however there is a workaround I have discovered with thanks to this &lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=59179" target="_blank"&gt;forum&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;First, let&amp;#39;s look at the statement I started with: Here I have a simple openquery statement to select everything from the table named &amp;#39;Atable&amp;#39; in an Oracle database named &amp;#39;OracleDB&amp;#39; (we&amp;#39;re assuming a linked server has already been set up), for records&amp;nbsp;since June 1st 2007.&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&lt;/span&gt;*&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;into&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MyTable&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; openquery&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp; OracleDB&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;&amp;#39;select&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Atable&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp; DateValue &amp;gt;= to_date(&amp;#39;&amp;#39;20070601&amp;#39;&amp;#39;, &amp;#39;&amp;#39;YYYYMMDD&amp;#39;&amp;#39;)&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;What I wanted to do was make the date sent to the Oracle database a variable so I could easily change it, so I declare this variable above the query and&amp;nbsp;use&amp;nbsp;it&amp;nbsp;in the argument.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@TheDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datetime&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;@TheDate =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;#39;2007-06-01T00:00:00&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&lt;/span&gt;*&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;into&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MyTable&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; openquery&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp; OracleDB&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;&amp;#39;select&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Atable&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp; DateValue &amp;gt;= to_date(&amp;#39;&amp;#39;&amp;#39; &lt;/span&gt;+ &lt;span style="color:blue;"&gt;convert&lt;/span&gt;(&lt;span style="color:blue;"&gt;varchar&lt;/span&gt;(30),@TheDate,120) + &lt;span style="color:maroon;"&gt;&amp;#39;&amp;#39;&amp;#39;, &amp;#39;&amp;#39;YYYY-MM-DD HH24:MI:SS&amp;#39;&amp;#39;)&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;This doesn&amp;#39;t work however, because . . . &amp;quot;OPENQUERY does not accept variables for its arguments.&amp;quot; (See above).&lt;/p&gt;&lt;p style="margin:0px;"&gt;The next step therefore is to put the select statement to be sent to the Oracle database in a string variable and use the date variable within this string. The variable&amp;nbsp;&amp;#39;@MyString&amp;#39; is then used in the OPENQUERY statement.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@TheDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datetime&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@MyString&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;(&lt;span style="color:blue;"&gt;max&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;@TheDate =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;#39;2007-06-01T00:00:00&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;@MyString =&amp;nbsp;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;#39;select&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Atable&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp; DateValue &amp;gt;= to_date(&amp;#39;&amp;#39;&amp;#39; &lt;/span&gt;+ &lt;span style="color:blue;"&gt;convert&lt;/span&gt;(&lt;span style="color:blue;"&gt;varchar&lt;/span&gt;(30),@TheDate,120) + &lt;span style="color:maroon;"&gt;&amp;#39;&amp;#39;&amp;#39;, &amp;#39;&amp;#39;YYYY-MM-DD HH24:MI:SS&amp;#39;&amp;#39;)&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&lt;/span&gt;*&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;into&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;MyTable&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; openquery&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp; OracleDB&lt;/p&gt;&lt;p style="margin:0px;"&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; @MyString&lt;/p&gt;&lt;p style="margin:0px;"&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;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;This again does not work however, because we are still trying to use a variable as an argument in the OPENQUERY statement, so now the trickery begins!&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;Immediately after setting the&amp;nbsp;string variable as the select statement, it is then set again&amp;nbsp;as the entire sql statement we are trying to execute, with the previously defined string used as an argument in the new string. Note that &amp;#39;N&amp;#39;&amp;nbsp;is used preceeding the string value to convert the tring to Nvarchar to eliminate any confusion around special characters.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;This string is then executed without error because all variables have been converted by this point. I have included a print command in order to verify the statement that is executed, which is useful for debugging.&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;@TheDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datetime&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@MyString&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;(&lt;span style="color:blue;"&gt;max&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;@TheDate =&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;#39;2007-06-01T00:00:00&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;@MyString =&amp;nbsp;&amp;nbsp;&lt;span style="color:maroon;"&gt;&amp;#39;select&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Atable&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp; DateValue &amp;gt;= to_date(&amp;#39;&amp;#39;&amp;#39; &lt;/span&gt;+ &lt;span style="color:blue;"&gt;convert&lt;/span&gt;(&lt;span style="color:blue;"&gt;varchar&lt;/span&gt;(30),@TheDate,120) + &lt;span style="color:maroon;"&gt;&amp;#39;&amp;#39;&amp;#39;, &amp;#39;&amp;#39;YYYY-MM-DD HH24:MI:SS&amp;#39;&amp;#39;)&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;set&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;@MyString =&amp;nbsp;&amp;nbsp;N&lt;span style="color:maroon;"&gt;&amp;#39;select&amp;nbsp;&amp;nbsp;&amp;nbsp; *&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;into&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:maroon;"&gt;MyTable&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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:maroon;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:maroon;"&gt;openquery&amp;nbsp;&amp;nbsp;&amp;nbsp; (&amp;nbsp;&amp;nbsp;&amp;nbsp; OracleDB&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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; &lt;span style="color:maroon;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;&amp;#39;&amp;#39; &lt;/span&gt;+ &lt;span style="color:blue;"&gt;REPLACE&lt;/span&gt;(@MyString, &lt;span style="color:maroon;"&gt;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style="color:maroon;"&gt;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;) + &lt;span style="color:maroon;"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&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; &lt;span style="color:maroon;"&gt;)&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;print&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;@MyString&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;EXEC&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;(@MyString)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;And that&amp;#39;s how you get more cowbell from OPENQUERY&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=7481" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Variables/default.aspx">Variables</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/cowbell/default.aspx">cowbell</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Openquery/default.aspx">Openquery</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL+Server/default.aspx">SQL Server</category></item><item><title>Brand value on the internet - a response</title><link>http://blogs.conchango.com/jamespipe/archive/2007/05/16/Brand-value-on-the-internet-_2D00_-a-response.aspx</link><pubDate>Wed, 16 May 2007 18:32:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:7002</guid><dc:creator>James.Pipe</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/7002.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=7002</wfw:commentRss><description>&lt;p&gt;In a recent blog post &lt;a href="http://blogs.conchango.com/jamiethomson" target="_blank"&gt;Jamie&lt;/a&gt; raised some interesting questions for debate around the value of branding on the internet. Since his comments were suitably open in an attempt to promote discussion, there was too much to respond to in a single comment, so I have posted a reply in a new blog, but you can see Jamie&amp;#39;s original post &lt;a href="http://blogs.conchango.com/jamiethomson/archive/2007/04/21/Brand-value-on-the-internet.aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;How valuable is a brand on the internet:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I see no reason why a brand wouldn&amp;#39;t be just as valuable, if not more so, on the internet than in the &amp;#39;real world&amp;#39;, and there are a number of reasons I see for this:&lt;/p&gt;&lt;p&gt;Consumers can search much more quickly and widely for products and services on the internet, so it is vital for an organisation to build up a respected brand to keep consumers coming back. Retention and return visits I would expect to be especially important for sites that generate revenue through advertisements based on site traffic.&lt;/p&gt;&lt;p&gt;As Jamie mentions in his post, trust is an important aspect of choosing online services and this is reflected in different ways, from &amp;quot;I use Google because I trust it to return the search results I am interested in&amp;quot; to &amp;quot;I buy Cds from Amazon.com because I&amp;#39;ve heard of them and know I can send them back if there&amp;#39;s a problem. I&amp;#39;ve never heard of cheapestcdsonthenet.com (just an example), how do I know I can trust them to deliver me genuine Cds?&amp;quot;. On the high street, a store is visible and a relatively stable entity that you can go back to to make a complaint. An online store could be set up in hours, scam lots of people out of money without delivering any products over a few weeks, then disappear. Established sites (brands) leverage their proven track record to overcome this fear in people&amp;#39;s minds.&lt;/p&gt;&lt;p&gt;Convenience is just as relevant on the internet as on the high street. If consumers go to a store they know to buy something because they know they can get it there, they will do the same online. Part of the reason I use the same online services is because I don&amp;#39;t want to&amp;nbsp;spend time finding alternative providers of that service and comparing which I like best. As long as the one I&amp;#39;m currently using does what I need, I&amp;#39;m happy. As easy as it is to find and compare alternatives online, people get lazy and with so much more information and distraction available online, people will seek to minimise effort expended unnecessarily to save time.&lt;/p&gt;&lt;p&gt;Having said that, if someone recommends a site or service to me, and I trust there opinion, then I will likely check it out and possibly switch (normally I rely on Jamie for this) and this is exactly how brands grow.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why is Microsoft lagging in the online brand tables?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are many ways to measure brands, but in my opinion, the only one of real relevance is within an industry or sector. The fact that Coca Cola for example is among the world&amp;#39;s most valuable brands has no relevance to me if I&amp;#39;m looking to buy a car. Ford however would have a massive bearing on my decision. As one of the leading brands in the automotive industry, I have heard of it, and as a result I will look at Fords when choosing. This can be taken a step further however, because the automotive industry is very diverse, such that if I were looking for a specific type of car, such as a family hatchback, Ford is still top of the list. If however I am looking for a 4wd, then perhaps Ford doesn&amp;#39;t feature highly at all for me, and instead I am looking at Range Rovers (probably not on my salary)&lt;/p&gt;&lt;p&gt;Taking this into account, we may see why Microsoft, which is unquestionably a leading brand in the IT industry, is not necessarily as strong online. The IT industry is again diverse enough such that it can be broken up into sectors that will have different leaders. What&amp;#39;s more, when a product or service moves from one technology to another, the market leader does not necessarily move with it if they don&amp;#39;t successfully adopt the new technology. Take encyclopedias as an example. When they were in book form, there was an industry leader, say in the form of Encyclopedia Britannica. When this product moved into digital format, Encarta did very well to lead the market. Now that it is online (and with the advent of wikis) we are seeing wikipedia dominate the market. I&amp;#39;ll admit encyclopedias are a slightly dubious example because Encarta and Britannica have both successfully made the transition online, but hopefully my point is clear enough and it leads me to another question:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Why don&amp;#39;t offline brands automatically convert online?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I don&amp;#39;t have an answer to this because I&amp;#39;m by no means an expert in this area, but it seems to me an important question. Why for example is Amazon a leading brand for selling books online when there were established brands on the high street such as Borders or Waterstones already? There may be many reasons, such as a slow adoption of the new technology by high street retailers; an assumption that their offline brand would guarantee them success online; resultant first mover advantage to the new player online (this explains the rise of youtube, Flickr, etc, who were not necessarily the first, but significantly early to benefit); online brand value may be based on different criteria than offline brand value; etc, etc&lt;/p&gt;&lt;p&gt;Finding answers to these questions is going to be key for determining the success of organisations online in the future, especially for any moving from one arena to&amp;nbsp;another. This doesn&amp;#39;t have to be high street retailers moving online, instead it could be traditional software providers seeking to offer their products via the internet, such as Microsoft in response to (or advance of) Google, or even an already established online provider. How for example will YouTube respond to a competitor that may come along utilising Silverlight?&lt;/p&gt;&lt;p&gt;I feel I&amp;#39;m beginning to ramble a bit, and if you&amp;#39;ve held out this long, you&amp;#39;re doing well, but I&amp;#39;d be interested to see some further discussion on this topic, so please, feel free to comment.&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=7002" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Youtube/default.aspx">Youtube</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Amazon/default.aspx">Amazon</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Brand+value/default.aspx">Brand value</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Online+brands/default.aspx">Online brands</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Google/default.aspx">Google</category></item><item><title>PL/SQL Calendar table</title><link>http://blogs.conchango.com/jamespipe/archive/2007/04/24/PL_2F00_SQL-Calendar-table.aspx</link><pubDate>Tue, 24 Apr 2007 15:00:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:6737</guid><dc:creator>James.Pipe</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/6737.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=6737</wfw:commentRss><description>&lt;p&gt;In addition to the &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/04/24/T_2D00_SQL-Calendar-table.aspx" target="_blank"&gt;T-SQL calendar table&lt;/a&gt;, which I have posted seperately, I went the whole hog and figured out the equivalent for Oracle. The only value I couldn&amp;#39;t work out was the millisecond, which is not present on the standard date type in Oracle, but which can be retrieved and I am looking into this when I have time. This query uses the code to generate a list of dates in Oracle which was my first ever blog &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/01/15/Oracle-SQL-_2D00_-Generate-a-list-of-dates.aspx" target="_blank"&gt;post&lt;/a&gt; on this site, yet somhow I&amp;#39;m still blogging about dates! Once again, I hope that it is self-explanatory, but feel free to leave a comment if you would like clarification.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level as &lt;/span&gt;DateRange&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;ddd&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;DAY OF YEAR&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;day&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;DAY&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;dy&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;SHORT DAY&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;-1, &lt;span style="color:red;"&gt;&amp;#39;d&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;DAY OF WEEK&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;dd&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;DAY OF MONTH&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;ww&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;WEEK&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;mm&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;MONTH&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;month&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;LONG MONTH&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;mon&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;SHORT MONTH&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;q&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;QUARTER&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;yyyy&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;YEAR&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;hh&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;HOUR&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;mi&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;MIN&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; to_char(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1 + &lt;span style="color:blue;"&gt;level&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;ss&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;SEC&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;from &lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dual&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;where &lt;/span&gt;&amp;nbsp;&amp;nbsp; (to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;YYYYMMDD&amp;#39;&lt;/span&gt;)-1+&lt;span style="color:blue;"&gt;level&lt;/span&gt;) &amp;lt;= trunc(sysdate)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;connect&amp;nbsp; by level&lt;/span&gt;&amp;lt;=1000&lt;/p&gt;&lt;p style="margin:0px;"&gt;;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=6737" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL_2F00_SQL/default.aspx">PL/SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL-SQL/default.aspx">PL-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+functions/default.aspx">Date functions</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date/default.aspx">Date</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+range/default.aspx">Date range</category></item><item><title>T-SQL Calendar table</title><link>http://blogs.conchango.com/jamespipe/archive/2007/04/24/T_2D00_SQL-Calendar-table.aspx</link><pubDate>Tue, 24 Apr 2007 14:51:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:6734</guid><dc:creator>James.Pipe</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/6734.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=6734</wfw:commentRss><description>&lt;p&gt;After experimentation with various datepart and datename methods following my most recent &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/04/24/PL_2F00_SQL-and-T_2D00_SQL-for-Week-Ending-Date.aspx" target="_blank"&gt;blog post&lt;/a&gt;, I was able to identify many if not all the necessary components for constructing a calendar table.To do this I have combined these functions with the SQL to generate a list of dates as posted by &lt;a href="http://blogs.conchango.com/jamiethomson/archive/2007/01/11/T_2D00_SQL_3A00_-Generate-a-list-of-dates.aspx" target="_blank"&gt;Jamie&lt;/a&gt; some time ago. The resultant SQL is given below, and hopefully does not require any specific explanation, however feel free to leave me a comment if you would like clarification on any part of it.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;with&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;mycte &lt;span style="color:blue;"&gt;as&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;select cast&lt;/span&gt;(&lt;span style="color:red;"&gt;&amp;#39;2007-04-16&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;) DateValue&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;union all&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;select &lt;/span&gt;DateValue + 1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;from &lt;/span&gt;&amp;nbsp;&amp;nbsp; mycte&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;where &lt;/span&gt;&amp;nbsp; DateValue + 1 &amp;lt; &lt;span style="color:red;"&gt;&amp;#39;2007-04-23&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;/p&gt;&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&lt;/span&gt;DateValue&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dy, DateValue) [day of year]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datename&lt;/span&gt;(dw, DateValue) [day]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dw, DateValue-1) [day of week]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dd, DateValue) [day of month]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(ww, DateValue) [week]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(mm, DateValue) [month]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datename&lt;/span&gt;(mm, DateValue) [month]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(qq, DateValue) [quarter]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(yy, DateValue) [year]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(HH, DateValue) [HOUR]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(MI, DateValue) [MIN]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(SS, DateValue) [SEC]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(MS, DateValue) [MILLISECOND]&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;from &lt;/span&gt;&amp;nbsp;&amp;nbsp; mycte&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;OPTION&amp;nbsp;&amp;nbsp;&lt;/span&gt;(MAXRECURSION 0)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=6734" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+functions/default.aspx">Date functions</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date/default.aspx">Date</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+range/default.aspx">Date range</category></item><item><title>PL/SQL and T-SQL for Week Ending Date</title><link>http://blogs.conchango.com/jamespipe/archive/2007/04/24/PL_2F00_SQL-and-T_2D00_SQL-for-Week-Ending-Date.aspx</link><pubDate>Tue, 24 Apr 2007 14:01:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:6731</guid><dc:creator>James.Pipe</dc:creator><slash:comments>9</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/6731.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=6731</wfw:commentRss><description>&lt;p&gt;Recently my colleague challenged me to&amp;nbsp; find a method for identifying the week ending date for the week which any given date belongs to; i.e. say for a gven date which&amp;nbsp;happens to be&amp;nbsp;a Tuesday, what is the date of the end of the week? In this example, week ending is defined as a Sunday, however depending on how your server is set up, week ending may be considered the Saturday (or more accurately week commencing may either be a Sunday or a Monday), but we easily deal with this as you will see.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;u&gt;T-SQL&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;The two methods are actually quite different as Oracle has some handy functions to help us, which T-SQL does not, therefore this method simply involves a calculation based on knowing which day of the week a given day is, and how many days are in a week, therefore how many days until the end of the week.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&amp;nbsp;cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;(), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;) [today]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datename&lt;/span&gt;(dw, &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()) [day]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dw, &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()-1) [day of week]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dw, &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()-1)-1 [days since monday]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 7-&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dw, &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()-1) [days until sunday]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), (&lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()-(&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dw, &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()-1)-1)), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;) [monday]&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), (&lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()+(7-&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(dw, &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()-1))), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;) [sunday]&lt;/p&gt;&lt;/div&gt;&lt;p&gt;The first line simply identifies the date in question, which for this example is the current date, cast to remove the time portion, then we can use the datepart and datename functions to identify further details about this date.&lt;/p&gt;&lt;p&gt;After identifying the name of the day, and day of the week (note that my server is configured to take Sunday as the first day of the week, but I want it to be Monday in this scenario, therefore I subtract 1 to make Monday the first day) it is relatively straightforward to calculate how many days since Monday and until Sunday. Days since is defined as &amp;#39;day of week&amp;#39;-1, because Monday is the first day of the week; Days until is defined as 7-&amp;#39;day of week&amp;#39;, because Sunday is the seventh day of the week.&lt;/p&gt;&lt;p&gt;Using these two numbers we can then either subtract or add them from the given date, which is then cast as a date to given the dates of the beginning and end of the week in question.&lt;/p&gt;&lt;p&gt;&lt;u&gt;&amp;nbsp;PL/SQL&lt;/u&gt;&lt;/p&gt;&lt;p&gt;In Oracle the task is much simpler because we can make use of the next_day function to&amp;nbsp; identify the date of a subsequent weekday for a given date.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;trunc(sysdate) &lt;span style="color:red;"&gt;&amp;quot;Today&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; next_day(trunc(sysdate-7), &lt;span style="color:red;"&gt;&amp;#39;monday&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;Monday&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; next_day(trunc(sysdate), &lt;span style="color:red;"&gt;&amp;#39;sunday&amp;#39;&lt;/span&gt;) &lt;span style="color:red;"&gt;&amp;quot;Sunday&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;dual&lt;/p&gt;&lt;p style="margin:0px;"&gt;;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;This makes identifying the next Sunday very easy as can be seen, and whilst for some reason there isn&amp;#39;t a corresponding &amp;#39;previous day&amp;#39; function, by subtracting 7 from our date and then finding the next Monday, we can find the date of the previous Monday without too much trouble.&lt;/p&gt;&lt;p&gt;Now that we have these methods, they can be incorporated into my previous entries for date range lookups for bothe &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/02/10/PL_2D00_SQL_3A00_-Common-date-range-lookups_3B00_-Daily_2C00_-Weekly_3B00_-MTD_3B00_-YTD_3B00_-Last-12-Months.aspx" target="_blank"&gt;PL/SQL&lt;/a&gt; and &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/03/01/T_2D00_SQL_3A00_-Common-date-ranges_3B00_-Daily_2C00_-Weekly_2C00_-Monthly_2C00_-Yearly_2C00_-Last-12-Months.aspx" target="_blank"&gt;T-SQL&lt;/a&gt;&lt;/p&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=6731" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/PL_2F00_SQL/default.aspx">PL/SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/List+of+dates/default.aspx">List of dates</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/next_5F00_day/default.aspx">next_day</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+functions/default.aspx">Date functions</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date/default.aspx">Date</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+range/default.aspx">Date range</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Week+Ending/default.aspx">Week Ending</category></item><item><title>T-SQL: Common date ranges; Daily, Weekly, Monthly, Yearly, Last 12 Months</title><link>http://blogs.conchango.com/jamespipe/archive/2007/03/01/T_2D00_SQL_3A00_-Common-date-ranges_3B00_-Daily_2C00_-Weekly_2C00_-Monthly_2C00_-Yearly_2C00_-Last-12-Months.aspx</link><pubDate>Thu, 01 Mar 2007 00:34:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:6175</guid><dc:creator>James.Pipe</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/6175.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=6175</wfw:commentRss><description>&lt;p&gt;As promised in my&amp;nbsp;original post on &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/02/10/PL_2D00_SQL_3A00_-Common-date-range-lookups_3B00_-Daily_2C00_-Weekly_3B00_-MTD_3B00_-YTD_3B00_-Last-12-Months.aspx" target="_blank"&gt;PL/SQL date ranges&lt;/a&gt;&amp;nbsp;previously, below is a sql statement which can be used preceeding&amp;nbsp;most queries in order to apply common date range lookups to the data the query returns. SQL Server Management Studio (SSMS) doesn&amp;#39;t have an equivalent to the &amp;#39;&amp;amp;&amp;#39; functionality that&amp;nbsp;TOAD has to &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/02/10/PL-SQL_3A00_-Passing-variables-in-TOAD-for-Oracle.aspx" target="_blank"&gt;prompt for variables&lt;/a&gt;, however what it does allow you to do, which I find particularly useful, is to declare and specify all of your variables upfront.&lt;/p&gt;&lt;p&gt;In order to make the statement more &lt;a href="http://en.wikipedia.org/wiki/Foolproof" target="_blank"&gt;foolproof&lt;/a&gt;, it is designed so the user only has to enter the date view and general date of interest and the specific start and end dates are derived. For example, if date view is &amp;#39;Monthly&amp;#39;, the user need only enter the Month and Year, e.g. December 2006. The statement however requires dates be entered in an &lt;a href="http://blogs.conchango.com/jamiethomson/archive/2005/04/26/Unambiguous-dates-in-SQL-Server.aspx" target="_blank"&gt;unambiguous&lt;/a&gt; format to make it even more robust, so December 2006 must actually be entered as &amp;#39;200612&amp;#39;.&lt;/p&gt;&lt;p&gt;Copy and paste the statement below into a new query in&amp;nbsp;SSMS and run it to experiment with different variables. Refer to the comments for guidance on what variables are allowed. Once again enddate is derived to take account of the current date, such as if year is the current year, etc.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;DECLARE&amp;nbsp;&amp;nbsp;&lt;/span&gt;@DateView&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;varchar &lt;/span&gt;(20)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @theDate&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;varchar &lt;/span&gt;(20)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @startDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;datetime&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @endDate&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;datetime&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;SELECT&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;@DateView&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;&lt;span style="color:red;"&gt;&amp;#39;Yearly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--enter the date view required: Select from &amp;#39;Daily&amp;#39;, &amp;#39;Weekly&amp;#39;, &amp;#39;Monthly&amp;#39;, &amp;#39;Yearly&amp;#39; and &amp;#39;Last 12 Months&amp;#39; or &amp;#39;All&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @thedate&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp;&amp;nbsp;&lt;span style="color:red;"&gt;&amp;#39;2007&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--For Daily enter the date in the format &amp;#39;YYYYMMDD&amp;#39; - e.g. &amp;#39;20060901&amp;#39; for September 1st 2006&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--For Weekly enter the week ending date in the format &amp;#39;YYYYMMDD&amp;#39;. Note that the week ends on a Sunday - e.g. &amp;#39;20060910&amp;#39; for September 10th 2006&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--For Monthly enter date in the format &amp;#39;YYYYMM&amp;#39; - e.g. &amp;#39;200609&amp;#39; for September 2006&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--For Yearly enter the date in the format &amp;#39;YYYY&amp;#39; - e.g. &amp;#39;2006&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--For Last 12 Months enter the date is not required as it is calculated up to the current date&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/span&gt;&amp;nbsp;&lt;span style="color:green;"&gt;--Do not update startdate and enddate below:&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @startDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;case&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Daily&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/span&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:blue;"&gt;then cast&lt;/span&gt;(@thedate &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Weekly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/span&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:blue;"&gt;then dateadd&lt;/span&gt;(dd,-6,&lt;span style="color:blue;"&gt;cast&lt;/span&gt;(@thedate &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;))&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Monthly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/span&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:blue;"&gt;then cast&lt;/span&gt;(@thedate+&lt;span style="color:red;"&gt;&amp;#39;01&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Yearly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/span&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:blue;"&gt;then cast&lt;/span&gt;(@thedate &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Last 12 Months&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/span&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:blue;"&gt;then dateadd&lt;/span&gt;(mm,-11,&lt;span style="color:blue;"&gt;cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(yyyy,&lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()) &lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;(4))+&lt;span style="color:blue;"&gt;right&lt;/span&gt;(&lt;span style="color:red;"&gt;&amp;#39;0&amp;#39;&lt;/span&gt;+&lt;span style="color:blue;"&gt;cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;datepart&lt;/span&gt;(mm,&lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()) &lt;span style="color:blue;"&gt;as varchar&lt;/span&gt;(2)),2) + &lt;span style="color:red;"&gt;&amp;#39;01&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;))&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/span&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:blue;"&gt;else cast&lt;/span&gt;(&lt;span style="color:red;"&gt;&amp;#39;2005-01-01&amp;#39; &lt;/span&gt;&lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/span&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:blue;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/span&gt;&amp;nbsp;,&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; @endDate&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; =&amp;nbsp;&amp;nbsp;&lt;span style="color:blue;"&gt;case&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Daily&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/span&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:blue;"&gt;then dateadd&lt;/span&gt;(dd, 1, @startDate)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Weekly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/span&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:blue;"&gt;then &lt;/span&gt;(&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/span&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 style="color:blue;"&gt;case when cast&lt;/span&gt;(@thedate &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)+1 &amp;gt; &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/span&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 style="color:blue;"&gt;then cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;(), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/span&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 style="color:blue;"&gt;else cast&lt;/span&gt;(@thedate &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)+1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/span&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 style="color:blue;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/span&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;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Monthly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/span&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:blue;"&gt;then &lt;/span&gt;(&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/span&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 style="color:blue;"&gt;case when dateadd&lt;/span&gt;(mm, 1, @startDate) &amp;gt; &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/span&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 style="color:blue;"&gt;then cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;(), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/span&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 style="color:blue;"&gt;else dateadd&lt;/span&gt;(mm, 1, @startDate)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/span&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 style="color:blue;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/span&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;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Yearly&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/span&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:blue;"&gt;then &lt;/span&gt;(&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/span&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 style="color:blue;"&gt;case when dateadd&lt;/span&gt;(mm,12,@StartDate) &amp;gt; &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;()&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/span&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 style="color:blue;"&gt;then cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;(), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/span&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 style="color:blue;"&gt;else dateadd&lt;/span&gt;(mm,12,@StartDate)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/span&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 style="color:blue;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/span&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;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/span&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:blue;"&gt;when &lt;/span&gt;@DateView = &lt;span style="color:red;"&gt;&amp;#39;Last 12 Months&amp;#39;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/span&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:blue;"&gt;then cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;(), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;54&lt;/span&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:blue;"&gt;else cast&lt;/span&gt;(&lt;span style="color:blue;"&gt;CONVERT&lt;/span&gt;(&lt;span style="color:blue;"&gt;char&lt;/span&gt;(10), &lt;span style="color:blue;"&gt;getdate&lt;/span&gt;(), 110) &lt;span style="color:blue;"&gt;as datetime&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;55&lt;/span&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:blue;"&gt;end&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;56&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;57&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;print&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@thedate&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;58&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;print&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@startdate&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;print&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@enddate&lt;/p&gt;&lt;/div&gt;&lt;p&gt;One of the big advantages of this method is that only one query is required to easily return data for any of the common date ranges, because of the use of the date view variable. To use this, simply paste it above the query desired (without the print commands), and use @startdate and @enddate in the where clauses, for example:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;select&amp;nbsp;&amp;nbsp;&lt;/span&gt;*&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a_table&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;a_date &amp;gt;= @startdate&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;a_date &amp;lt;&amp;nbsp; @enddate&lt;/p&gt;&lt;/div&gt;&lt;p&gt;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=6175" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/T-SQL/default.aspx">T-SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/case+statement/default.aspx">case statement</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+functions/default.aspx">Date functions</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date/default.aspx">Date</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/Date+range/default.aspx">Date range</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/MTD/default.aspx">MTD</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/YTD/default.aspx">YTD</category></item><item><title>SQl Server 2005 - more from Rowland-Jones</title><link>http://blogs.conchango.com/jamespipe/archive/2007/02/20/SQl-Server-2005-_2D00_-more-from-Rowland_2D00_Jones.aspx</link><pubDate>Tue, 20 Feb 2007 18:46:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:6036</guid><dc:creator>James.Pipe</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/6036.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=6036</wfw:commentRss><description>&lt;p&gt;For those that read my query performance &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/02/09/SQL-Server-2005-Query-Performance-addendum.aspx" target="_blank"&gt;addendum&lt;/a&gt; you will know that I was posting a contribution emailed to me by my colleague James Roland-Jones. Well JRJ has now started to post his own thoughts on SQL Server 2005 and SSIS, so if you would like to get the latest straight from the horse&amp;#39;s mouth, you can do so &lt;a href="http://blogs.conchango.com/jamesrowlandjones/" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;James&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=6036" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.conchango.com/jamespipe/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category></item><item><title>PL-SQL: Common date range lookups; Daily, Weekly; MTD; YTD; Last 12 Months</title><link>http://blogs.conchango.com/jamespipe/archive/2007/02/10/PL_2D00_SQL_3A00_-Common-date-range-lookups_3B00_-Daily_2C00_-Weekly_3B00_-MTD_3B00_-YTD_3B00_-Last-12-Months.aspx</link><pubDate>Sat, 10 Feb 2007 04:00:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:5926</guid><dc:creator>James.Pipe</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.conchango.com/jamespipe/comments/5926.aspx</comments><wfw:commentRss>http://blogs.conchango.com/jamespipe/commentrss.aspx?PostID=5926</wfw:commentRss><description>&lt;p&gt;As part of my current role as a tester I am often required to write the same basic expressions again and again in my queries, most noticeably to bring back data for specific date ranges, therefore for the benefit of anyone else out there who has to do likewise I have detailed below my method for returning the following basic ranges:&lt;/p&gt;&lt;p&gt;Daily; Week to date; Month to date; Year to Date; and Rolling year (or Last 12 months). Presently I am working predominantly with Oracle based systems, there for the following is only the PL SQL for the aforementioned ranges.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Daily&lt;/u&gt;&lt;/p&gt;&lt;p&gt;As good a starting place as any, the query to return data for the day is the basis from which we can build the other expressions;&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Select&amp;nbsp;&amp;nbsp;&lt;/span&gt;a_field&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a_table&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date = to_date(&lt;span style="color:red;"&gt;&amp;#39;01/01/2006&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;This will return the data in a_field for the 1st January 2006 only, however to make the query more flexible we can replace the exact data with a &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/02/10/PL-SQL_3A00_-Passing-variables-in-TOAD-for-Oracle.aspx" target="_blank"&gt;variable&lt;/a&gt; like &lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt; which will prompt the user to enter the date at run time.&lt;/p&gt;&lt;p&gt;The format in the second half of the to_date expression is the format that the date must be entered in and also tells the SQL engine what format the date is being entered in, therefore you can set the format however you like, for example &lt;span style="color:red;"&gt;&amp;#39;MM/DD/YYYY&amp;#39;&lt;/span&gt; for the US date format.&lt;/p&gt;&lt;p&gt;One final trick before we get into the other ranges is to account for dates outside of the range for which we have data. This may be required for example when&amp;nbsp;the data load into a data warehouse is a day behind the current date (as data loads often run over night up to and including that day&amp;rsquo;s data, therefore in the morning the data is current up to the day before). This method will also be used to account for partial ranges in the subsequent queries; e.g. a partial month or week.&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Select&amp;nbsp;&amp;nbsp;&lt;/span&gt;a_field&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a_table&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date =&amp;nbsp; (&lt;span style="color:blue;"&gt;case when &lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;) &amp;gt; trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&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:blue;"&gt;then &lt;/span&gt;trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&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:blue;"&gt;else &lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&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:blue;"&gt;end&lt;/span&gt;)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;The case statement here evaluates the date entered by the user to determine if it is greater than the most recent date for which we have data &amp;ndash; in this case the day before today (sysdate is Oracle&amp;rsquo;s command to return the current date). Note that we truncate sysdate because it is a date/time entry, but we are only interested in the date portion.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Weekly&lt;/u&gt;&lt;/p&gt;&lt;p&gt;For week ending we can make use of the default behaviour for subtracting days from a date&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Select&amp;nbsp;&amp;nbsp;&lt;/span&gt;a_field&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a_table&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;between &lt;/span&gt;(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;)-6) &lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&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:blue;"&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;(&lt;span style="color:blue;"&gt;case when &lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;) &amp;gt; trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&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:blue;"&gt;then &lt;/span&gt;trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&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:blue;"&gt;else &lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&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:blue;"&gt;end&lt;/span&gt;)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Note that in this example I have used the date function &amp;lsquo;&lt;span style="color:blue;"&gt;between&lt;/span&gt;&amp;hellip; &lt;span style="color:blue;"&gt;and&lt;/span&gt;&amp;rsquo;, however some people prefer to use a pair of &amp;lsquo;&lt;span style="color:blue;"&gt;where&lt;/span&gt;&amp;rsquo; clauses, as in the example below.&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;=&amp;nbsp;&amp;nbsp;(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;)-6) &lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;=&amp;nbsp;&amp;nbsp;(&lt;span style="color:blue;"&gt;case when &lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;) &amp;gt; trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&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:blue;"&gt;then &lt;/span&gt;trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&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:blue;"&gt;else &lt;/span&gt;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&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:blue;"&gt;end&lt;/span&gt;)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;As far as I am aware, there is no performance difference between the two, more a matter of personal preference. Some people may feel that the &lt;span style="color:blue;"&gt;where&lt;/span&gt; statements give them more control over exactly which dates are included because they can make use of &amp;lsquo;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;, &lt;span style="color:blue;"&gt;&amp;lt;=&lt;/span&gt;, &lt;span style="color:blue;"&gt;=&lt;/span&gt;, &lt;span style="color:blue;"&gt;&amp;gt;=&lt;/span&gt;, &lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;, etc&amp;rsquo; and may be uncertain of whether &amp;lsquo;&lt;span style="color:blue;"&gt;between&lt;/span&gt;&amp;hellip; &lt;span style="color:blue;"&gt;and&lt;/span&gt;&amp;rsquo; is inclusive of the dates or not. I am confident enough to say however that it is inclusive therefore the same amount of control can be attained by varying the date used, e.g. shift it one day higher to emulate &amp;lsquo;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&amp;rsquo;, etc.&lt;/p&gt;&lt;p&gt;This sql relies on the user entering the week ending date for the week they are interested in, however if you wanted to construct it so that all they had to do was enter a date within the week of interest, you would need to evaluate the date to identify the begining and end of the week. One way this could be done is to use the &lt;a href="http://blogs.conchango.com/jamespipe/archive/2007/02/03/Selecting-the-last-weekday-in-a-given-month.aspx" target="_blank"&gt;next_day&lt;/a&gt; function to identify for example the next Saturday or Sunday, depending when you define the week as ending. By subtracting 7 from the date then and finding the next Sunday or Monday (depending when you define the week as starting, you would have your week begining date too.&lt;/p&gt;&lt;p&gt;&lt;u&gt;Monthly&lt;/u&gt;&lt;/p&gt;&lt;p&gt;For month ending:&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Select&amp;nbsp;&amp;nbsp;&lt;/span&gt;a_field&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a_table&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;=&amp;nbsp;&amp;nbsp;to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;) &lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;=&amp;nbsp;&amp;nbsp;(&lt;span style="color:blue;"&gt;case when &lt;/span&gt;last_day(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;)) &amp;gt; trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&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:blue;"&gt;then &lt;/span&gt;trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&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:blue;"&gt;else &lt;/span&gt;last_day(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;))&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&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:blue;"&gt;end&lt;/span&gt;)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;Notice I have used a different date format here - &lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;, which allows me to enter the date as just a &amp;lsquo;month year&amp;rsquo; combination, such as &amp;lsquo;January 2006&amp;rsquo;. The to_date function automatically takes this as the first of the month allowing me to use the last_day function to acquire the end of the month. Again the case statement allows data for a partial month to be retrieved.&lt;/p&gt;&lt;p&gt;If you wanted to create a specific month to date query for a particular day in the month such as month to the 15/01/2006 all you need do is change the date format, such as to &lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt; in this example.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;Yearly&lt;/u&gt;&lt;/p&gt;&lt;p&gt;For the year to date:&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;Select&amp;nbsp;&amp;nbsp;&lt;/span&gt;a_field&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;from&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;a_table&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;=&amp;nbsp;&amp;nbsp;TRUNC(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;), &lt;span style="color:red;"&gt;&amp;#39;YYYY&amp;#39;&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&amp;nbsp;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;=&amp;nbsp;&amp;nbsp;(&lt;span style="color:blue;"&gt;case when &lt;/span&gt;last_day(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;)) &amp;gt; trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/span&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:blue;"&gt;then &lt;/span&gt;trunc(sysdate)-1&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/span&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:blue;"&gt;else &lt;/span&gt;last_day(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;Date&amp;#39;&lt;/span&gt;,&lt;span style="color:red;"&gt;&amp;#39;MM YYYY&amp;#39;&lt;/span&gt;))&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/span&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:blue;"&gt;end&lt;/span&gt;)&lt;/p&gt;&lt;/div&gt;&lt;p&gt;The paramater &lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt; is entered as a month year combination (e.g. January 2006), but to_date converts it to &amp;lsquo;DD/MM/YYYY&amp;rsquo;. By truncating the date on the year, the date is converted to &amp;lsquo;01-01-YYYY.&amp;rsquo;&lt;/p&gt;&lt;p&gt;Once again if you required a year to a specific date then simply apply the appropriate format (&lt;span style="color:red;"&gt;&amp;#39;DD/MM/YYYY&amp;#39;&lt;/span&gt;) to the expression. Alternatively, you may just want to enter the year and rely on the case statement to find the appropriate point for year to date, e.g.:&lt;/p&gt;&lt;div style="font-size:10pt;background:white;color:black;font-family:Courier New;"&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;where&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;gt;=&amp;nbsp;&amp;nbsp;&amp;nbsp;TRUNC(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;, &lt;span style="color:red;"&gt;&amp;#39;YYYY&amp;#39;&lt;/span&gt;), &lt;span style="color:red;"&gt;&amp;#39;YYYY&amp;#39;&lt;/span&gt;)&lt;/p&gt;&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&lt;span style="color:blue;"&gt;and&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;the_date&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;=&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span style="color:blue;"&gt;case when &lt;/span&gt;TRUNC(to_date(&lt;span style="color:red;"&gt;&amp;#39;&amp;amp;date&amp;#39;&lt;/span&gt;+1, &lt;span style="color:red;"&gt;&amp;#39;YYYY&amp;#39;&lt;/span&gt;), &lt;span style="c