{"id":13937,"date":"2018-05-08T07:40:04","date_gmt":"2018-05-08T07:40:04","guid":{"rendered":"https:\/\/kb.sambapos.com\/?p=13937"},"modified":"2018-07-05T11:25:34","modified_gmt":"2018-07-05T11:25:34","slug":"9-1-2-creating-custom-reports-with-sql","status":"publish","type":"post","link":"https:\/\/kb.sambapos.com\/en\/9-1-2-creating-custom-reports-with-sql\/","title":{"rendered":"9.1.2. Creating Custom Reports with SQL"},"content":{"rendered":"<h2 id=\"adding_sql_scripts\" class=\"sectionedit2\">Adding SQL Scripts<\/h2>\n<div class=\"level2\">\n<p>You can display result of an SQL Script in custom reports. If SQL Scripts returns a single value you can use it as a cell value. If it returns multiple values that will be formatted as a table row. In other words SQL result will be converted to a list where each line contains\u00a0<code>|<\/code>\u00a0delimited cell values. So custom report engine can display them as table rows.<\/p>\n<\/div>\n<h2 id=\"creating_a_sql_script\" class=\"sectionedit3\">Creating an SQL script<\/h2>\n<div class=\"level2\">\n<p><span class=\"wrap_tip \">Tip;<\/span>\u00a0In this section samples won&#8217;t be real SQL scripts. It will be just shown how you can display SQL results in custom reports.<\/p>\n<p>Navigate to\u00a0<code>Management &gt; Automation &gt; Scripts<\/code>\u00a0to create a new script.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13940 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-01-1024x618.jpg\" alt=\"\" width=\"640\" height=\"386\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-01-1024x618.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-01-300x181.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-01-768x463.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p><code>Select 5+3<\/code>\u00a0script returns the result of calculation.<\/p>\n<p><span class=\"wrap_tip \">Tip;<\/span>\u00a0<code>Handler<\/code>\u00a0is the name that will be referenced from reports. It should start with `@@` and should not contain spaces.<\/p>\n<p><span class=\"wrap_tip \">Tip;<\/span>\u00a0The reason for creating SQL Scripts outside reports is making\u00a0 scripts reusable so that they can be accessed from multiple reports.<\/p>\n<p>After saving it you can access this script from custom report by using\u00a0<code>@@Handler_Name<\/code>\u00a0syntax. For this example\u00a0<code>@@SQL1<\/code>\u00a0will display the result of the (5+3) calculation in reports.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13942 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-02-1024x618.jpg\" alt=\"\" width=\"640\" height=\"386\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-02-1024x618.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-02-300x181.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-02-768x463.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>In the template we have this section.<\/p>\n<table style=\"height: 105px; width: 620px;\">\n<tbody>\n<tr>\n<td style=\"width: 616px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[SQL Results:1,1]\r\nValue1|@@SQL1     &gt;&gt;&gt; @@SQL1 cell value replaces with the result of 5+3 calculation.<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>Since example table have 2 columns, it is possible to return 2 values as the result of\u00a0<code>@@SQL1<\/code>\u00a0and use it as a row.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13947 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-04-1024x618.jpg\" alt=\"\" width=\"640\" height=\"386\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-04-1024x618.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-04-300x181.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-04-768x463.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>It has been added another expression to SQL script so it will return a single row with two columns. As it returns multiple values you can use it as whole row. SambaPOS will automatically convert result to a\u00a0<code>|<\/code>\u00a0delimited row as\u00a0<strong>Value|Value2<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13951 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-05-1024x618.jpg\" alt=\"\" width=\"640\" height=\"386\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-05-1024x618.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-05-300x181.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-05-768x463.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<h2 id=\"a_real_life_example\" class=\"sectionedit4\">A Real Life Example<\/h2>\n<div class=\"level2\">\n<p>This script displays ticket counts by peak hours.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13953 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-06-1024x596.jpg\" alt=\"\" width=\"640\" height=\"373\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-06-1024x596.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-06-300x175.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-06-768x447.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<table style=\"height: 150px; width: 642px;\">\n<tbody>\n<tr>\n<td style=\"width: 634px;\">\n<pre class=\"code sql\"><span style=\"font-size: 10pt;\"><span class=\"kw1\">SELECT<\/span> <span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"br0\">(<\/span><span class=\"nu0\">20<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">103<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span>\r\n  <span class=\"kw1\">COUNT<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> DATEPART<span class=\"br0\">(<\/span><span class=\"kw1\">HOUR<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">DATE<\/span><span class=\"br0\">]<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">BETWEEN<\/span> <span class=\"nu0\">9<\/span> <span class=\"kw1\">AND<\/span> <span class=\"nu0\">11<\/span> <span class=\"kw1\">THEN<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span>\r\n  <span class=\"kw1\">COUNT<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> DATEPART<span class=\"br0\">(<\/span><span class=\"kw1\">HOUR<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">DATE<\/span><span class=\"br0\">]<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">BETWEEN<\/span> <span class=\"nu0\">12<\/span> <span class=\"kw1\">AND<\/span> <span class=\"nu0\">14<\/span> <span class=\"kw1\">THEN<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span>\r\n  <span class=\"kw1\">COUNT<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> DATEPART<span class=\"br0\">(<\/span><span class=\"kw1\">HOUR<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">DATE<\/span><span class=\"br0\">]<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">BETWEEN<\/span> <span class=\"nu0\">18<\/span> <span class=\"kw1\">AND<\/span> <span class=\"nu0\">20<\/span> <span class=\"kw1\">THEN<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span> \r\n<span class=\"kw1\">FROM<\/span> Tickets\r\n  <span class=\"kw1\">GROUP<\/span> <span class=\"kw1\">BY<\/span> <span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"br0\">(<\/span><span class=\"nu0\">20<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">103<\/span><span class=\"br0\">)<\/span><\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>This script returns 4 columns per row so it is necessary to prepare a 4 column table. A new report has been created by choosing\u00a0<code>Add Report<\/code>\u00a0from report selection drop down and named it as\u00a0<code>Ticket Counts by Peak Hours<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13957 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-08-1024x596.jpg\" alt=\"\" width=\"640\" height=\"373\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-08-1024x596.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-08-300x175.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-08-768x447.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<table style=\"height: 96px; width: 642px;\">\n<tbody>\n<tr>\n<td style=\"width: 636px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">  [Ticket Counts:3,1,1,1]       &gt;&gt;&gt; Table definition and column sizes.\r\n  &gt;Date|9-11|12-14|18-20        &gt;&gt;&gt; Header row. Starts with &gt; char.\r\n  @TicketCountsByPeakHours      &gt;&gt;&gt; SQL Script that returns rows.<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2 id=\"adding_totals_to_report\" class=\"sectionedit5\">Adding Totals to Report<\/h2>\n<div class=\"level2\">\n<p>Use another SQL Script to display a summary footer under table.<\/p>\n<table style=\"height: 142px; width: 647px;\">\n<tbody>\n<tr>\n<td style=\"width: 641px;\">\n<pre class=\"code SQL\"><span style=\"font-size: 10pt;\"><span class=\"kw1\">SELECT<\/span> <span class=\"st0\">'Totals'<\/span><span class=\"sy0\">,<\/span>\r\n  <span class=\"kw1\">COUNT<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> DATEPART<span class=\"br0\">(<\/span><span class=\"kw1\">HOUR<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">DATE<\/span><span class=\"br0\">]<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">BETWEEN<\/span> <span class=\"nu0\">9<\/span> <span class=\"kw1\">AND<\/span> <span class=\"nu0\">11<\/span> <span class=\"kw1\">THEN<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span>\r\n  <span class=\"kw1\">COUNT<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> DATEPART<span class=\"br0\">(<\/span><span class=\"kw1\">HOUR<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">DATE<\/span><span class=\"br0\">]<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">BETWEEN<\/span> <span class=\"nu0\">12<\/span> <span class=\"kw1\">AND<\/span> <span class=\"nu0\">14<\/span> <span class=\"kw1\">THEN<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span>\r\n  <span class=\"kw1\">COUNT<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> DATEPART<span class=\"br0\">(<\/span><span class=\"kw1\">HOUR<\/span><span class=\"sy0\">,<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">DATE<\/span><span class=\"br0\">]<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">BETWEEN<\/span> <span class=\"nu0\">18<\/span> <span class=\"kw1\">AND<\/span> <span class=\"nu0\">20<\/span> <span class=\"kw1\">THEN<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span> \r\n<span class=\"kw1\">FROM<\/span> Tickets<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>You should create a new script and use a different handle for that script. you can access this script with\u00a0<code>@@TicketCountsByPeakHoursTotals<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13963 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-11-1024x596.jpg\" alt=\"\" width=\"640\" height=\"373\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-11-1024x596.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-11-300x175.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-11-768x447.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>\u2026 and the report should be updated as shown here.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13965 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-12-1024x596.jpg\" alt=\"\" width=\"640\" height=\"373\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-12-1024x596.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-12-300x175.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-12-768x447.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<div class=\"level2\">\n<p>Adding\u00a0<code>&gt;<\/code>\u00a0char in front of the row will convert it to a bold row. For this reason it has been added\u00a0<code>&gt;<\/code>\u00a0char in front of @@TicketCountsByPeakHoursTotals to make it appear as a footer.<\/p>\n<\/div>\n<h2 id=\"filtering_sql_results_by_date\" class=\"sectionedit6\">Filtering SQL Results by Date<\/h2>\n<div class=\"level2\">\n<p>You&#8217;ll notice the example SQL script displays results for all tickets and changing dates does no change on values. However it is necessary to see the results for date ranges. To access selected date range from inside SQL Scripts you can use\u00a0<code>{Start}<\/code>\u00a0and\u00a0<code>{End}<\/code>\u00a0tags. Here there is another example.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13967 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-13-1024x596.jpg\" alt=\"\" width=\"640\" height=\"373\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-13-1024x596.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-13-300x175.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-13-768x447.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<table style=\"height: 263px; width: 779px;\">\n<tbody>\n<tr>\n<td style=\"width: 651px;\">\n<pre class=\"code sql\"><span style=\"font-size: 10pt;\"><span class=\"kw1\">SELECT<\/span>    \r\n    T<span class=\"sy0\">.<\/span>TicketNumber<span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">105<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">108<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">TIME<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span>Customer Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">2<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">TABLE<\/span> Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span>T<span class=\"sy0\">.<\/span>TotalAmount<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> TotalAmount    \r\n<span class=\"kw1\">FROM<\/span> Tickets <span class=\"kw1\">AS<\/span> T    \r\n    <span class=\"kw1\">LEFT<\/span> <span class=\"kw1\">OUTER<\/span> <span class=\"kw1\">JOIN<\/span> TicketEntities <span class=\"kw1\">AS<\/span> TE <span class=\"kw1\">ON<\/span> TE<span class=\"sy0\">.<\/span>Ticket_Id <span class=\"sy0\">=<\/span> T<span class=\"sy0\">.<\/span>Id    \r\n<span class=\"kw1\">WHERE<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"st0\">'{Start}'<\/span> <span class=\"kw1\">AND<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"st0\">'{End}'<\/span>    \r\n<span class=\"kw1\">GROUP<\/span> <span class=\"kw1\">BY<\/span> T<span class=\"sy0\">.<\/span>TicketNumber    \r\n<span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">TIME<\/span><\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>This script displays a ticket list. As date tags were included it will display tickets for only selected date range.<\/p>\n<p>Another report will be added by clicking\u00a0<code>Add Report<\/code>\u00a0from report selection drop down. As this table displays 6 columns per row it is necessary to create a 6 column table.<\/p>\n<table style=\"height: 100px; width: 636px;\">\n<tbody>\n<tr>\n<td style=\"width: 628px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[Tickets:1,2,2,2,2, 2]\r\n&gt;Ticket No|Date|Time|Customer|Table|Amount\r\n@@TicketList<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>The SQL result can be accessed with\u00a0<code>@@TicketList<\/code>\u00a0handle.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13973 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-16-1024x596.jpg\" alt=\"\" width=\"640\" height=\"373\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-16-1024x596.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-16-300x175.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-16-768x447.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p><span class=\"wrap_tip \">Tip;<\/span>\u00a0It has been also set\u00a0<code>Page Size<\/code>\u00a0value in centimeters for better viewing.<\/p>\n<h2 id=\"using_parameters_in_sql_scripts\" class=\"sectionedit7\">Using Parameters in SQL Scripts<\/h2>\n<table style=\"height: 207px;\" width=\"709\">\n<tbody>\n<tr>\n<td style=\"width: 699px;\">\n<pre class=\"code sql\"><span style=\"font-size: 10pt;\"><span class=\"kw1\">SELECT<\/span>    \r\n    T<span class=\"sy0\">.<\/span>TicketNumber<span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">105<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">108<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">TIME<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span>Customer Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">2<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">TABLE<\/span> Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span>T<span class=\"sy0\">.<\/span>TotalAmount<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> TotalAmount    \r\n<span class=\"kw1\">FROM<\/span> Tickets <span class=\"kw1\">AS<\/span> T    \r\n    <span class=\"kw1\">LEFT<\/span> <span class=\"kw1\">OUTER<\/span> <span class=\"kw1\">JOIN<\/span> TicketEntities <span class=\"kw1\">AS<\/span> TE <span class=\"kw1\">ON<\/span> TE<span class=\"sy0\">.<\/span>Ticket_Id <span class=\"sy0\">=<\/span> T<span class=\"sy0\">.<\/span>Id    \r\n<span class=\"kw1\">WHERE<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"st0\">'{Start}'<\/span> <span class=\"kw1\">AND<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"st0\">'{End}'<\/span> <span class=\"kw1\">AND<\/span> T<span class=\"sy0\">.<\/span>LastModifiedUserName <span class=\"sy0\">=<\/span> <span class=\"st0\">'Administrator'<\/span>\r\n<span class=\"kw1\">GROUP<\/span> <span class=\"kw1\">BY<\/span> T<span class=\"sy0\">.<\/span>TicketNumber    \r\n<span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">TIME<\/span><\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>In this sample it has been added\u00a0<code>and T.LastModifiedUserName = 'Administrator'\u00a0<\/code>part to the Where clause to list tickets only modified by\u00a0<code>Administrator<\/code>\u00a0user. To display the report from multiple users you need to create a separate script for each user as it has been hardcoded user name into script.<\/p>\n<p>Instead of hardcoding user names into script you can configure it as a parameter.<\/p>\n<table style=\"height: 244px;\" width=\"696\">\n<tbody>\n<tr>\n<td style=\"width: 686px;\">\n<pre class=\"code sql\"><span style=\"font-size: 10pt;\"><span class=\"kw1\">SELECT<\/span>    \r\n    T<span class=\"sy0\">.<\/span>TicketNumber<span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">105<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">108<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">TIME<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span>Customer Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">2<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">TABLE<\/span> Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span>T<span class=\"sy0\">.<\/span>TotalAmount<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> TotalAmount    \r\n<span class=\"kw1\">FROM<\/span> Tickets <span class=\"kw1\">AS<\/span> T    \r\n    <span class=\"kw1\">LEFT<\/span> <span class=\"kw1\">OUTER<\/span> <span class=\"kw1\">JOIN<\/span> TicketEntities <span class=\"kw1\">AS<\/span> TE <span class=\"kw1\">ON<\/span> TE<span class=\"sy0\">.<\/span>Ticket_Id <span class=\"sy0\">=<\/span> T<span class=\"sy0\">.<\/span>Id    \r\n<span class=\"kw1\">WHERE<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"st0\">'{Start}'<\/span> <span class=\"kw1\">AND<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"st0\">'{End}'<\/span> <span class=\"kw1\">AND<\/span> T<span class=\"sy0\">.<\/span>LastModifiedUserName <span class=\"sy0\">=<\/span> <span class=\"st0\">'@1'<\/span>\r\n<span class=\"kw1\">GROUP<\/span> <span class=\"kw1\">BY<\/span> T<span class=\"sy0\">.<\/span>TicketNumber    \r\n<span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">TIME<\/span><\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>It was changed\u00a0<code>T.LastModifiedUserName = 'Administrator'\u00a0<\/code>part to\u00a0<code>T.LastModifiedUserName = '@1'\u00a0<\/code>.\u00a0<code>@1<\/code>\u00a0means first parameter. If you need to use more parameters you can name them as\u00a0<code>@2<\/code>,\u00a0<code>@3<\/code>, \u2026 etc.<\/p>\n<p>In this report template, it will be passed\u00a0<code>Administrator<\/code>\u00a0value to SQL by typing parameters next to handle name.<\/p>\n<table style=\"height: 84px; width: 635px;\">\n<tbody>\n<tr>\n<td style=\"width: 627px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[Tickets:1,2,2,2,2, 2]\r\n&gt;Ticket No|Date|Time|Customer|Table|Amount\r\n@@TicketList:Administrator<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>It has been added a colon after\u00a0<code>@@TicketList<\/code>\u00a0handle and typed user name there. It will replace with\u00a0<code>@1<\/code>\u00a0in SQL as it is first parameter. You can also set a comma separated parameter list so you can access second parameter with\u00a0<code>@2<\/code>and third one with\u00a0<code>@3<\/code>. After this change the report should show only tickets created by\u00a0<code>Administrator<\/code>.<\/p>\n<p>You can create multiple sections for each user. For example it is possible to change this template to include multiple user&#8217;s tickets.<\/p>\n<table style=\"height: 188px; width: 636px;\">\n<tbody>\n<tr>\n<td style=\"width: 628px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[Tickets:1,2,2,2,2, 2]\r\n&gt;Ticket No|Date|Time|Customer|Table|Amount\r\n&gt;Administrator's Tickets\r\n@@TicketList:Administrator\r\n&gt;Managers's Tickets\r\n@@TicketList:Manager\r\n&gt;Waiters's Tickets\r\n@@TicketList:Waiter<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>It will create a beautiful ticket list grouped by user names.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-13983 size-large\" src=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-22-1024x496.jpg\" alt=\"\" width=\"640\" height=\"310\" srcset=\"https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-22-1024x496.jpg 1024w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-22-300x145.jpg 300w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-22-768x372.jpg 768w, https:\/\/kb.sambapos.com\/wp-content\/uploads\/2018\/05\/9-1-2-Creating-Custom-Reports-with-SQL-22.jpg 1366w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<h2 id=\"using_parameter_sources\" class=\"sectionedit8\">Using Parameter Sources<\/h2>\n<div class=\"level2\">\n<p>To simplify this template you can use\u00a0<code>Parameter Source<\/code>\u00a0feature. Instead of duplicating a report section for each user you can define a parameter list for possible values. You can change the template like this:<\/p>\n<table style=\"height: 108px; width: 644px;\">\n<tbody>\n<tr>\n<td style=\"width: 638px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[Tickets:1,2,2,2,2, 2]\r\n&gt;Ticket No|Date|Time|Customer|Table|Amount\r\n&gt;$1's Tickets\r\n@@TicketList:$1<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>It has been replaced user name references with\u00a0<code>$1<\/code>\u00a0keyword and deleted other sections. Now it is necessary to configure which values $1 can have. To configure a parameter list a line will be added just before first $1. That line will start\u00a0<code>@<\/code>\u00a0char and contain a comma delimited list of possible values.<\/p>\n<table style=\"height: 127px; width: 657px;\">\n<tbody>\n<tr>\n<td style=\"width: 649px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[Tickets:1,2,2,2,2, 2]\r\n&gt;Ticket No|Date|Time|Customer|Table|Amount\r\n@Administrator,Manager,Waiter\r\n&gt;$1's Tickets\r\n@@TicketList:$1<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><code>@Administrator,Manager,Waiter<\/code>\u00a0line defines values for $1 so a separate section will appear for each value inside report. That report will be same with the one that can be seen on the above screen shot.<\/p>\n<p>Instead of typing a parameter list you can use an SQL Script to fetch parameter values. For example if you have a single column SQL script that returns User Names you can use it instead.<\/p>\n<table style=\"height: 140px; width: 656px;\">\n<tbody>\n<tr>\n<td style=\"width: 648px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">[Tickets:1,2,2,2,2, 2]\r\n&gt;Ticket No|Date|Time|Customer|Table|Amount\r\n@ @@GetUserNames\r\n&gt;$1's Tickets\r\n@@TicketList:$1\r\n&gt;Total|@@TicketTotal:$1<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p><code>@@GetUserNames<\/code>\u00a0is an SQL Script that returns names from users table.<\/p>\n<table style=\"height: 32px; width: 664px;\">\n<tbody>\n<tr>\n<td style=\"width: 656px;\">\n<pre class=\"code\"><span style=\"font-size: 10pt;\">Select Name from Users<\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<div class=\"level2\">\n<p>After this change, report will display a separate section for each user created in SambaPOS.<\/p>\n<p>In last template it is also included\u00a0<code>&gt;Total|@@TicketTotal:$1<\/code>\u00a0line to demonstrate how you can include footer totals.\u00a0<code>@@TicketTotal<\/code>\u00a0is also an SQL script that accepts a user name parameter and returns total sum of tickets as a single value.<\/p>\n<p><span class=\"wrap_tip \">Tip;<\/span>\u00a0You can also use parameter sources for reports you will generate by using\u00a0<a class=\"wikilink1\" title=\"custom_reporting_tags\" href=\"https:\/\/sambapos.com\/wiki\/doku.php\/custom_reporting_tags\">Custom Reporting Tags<\/a>. For advanced grouping features you can find useful information under\u00a0<a class=\"wikilink1\" title=\"custom_report_pivot_table_views\" href=\"https:\/\/sambapos.com\/wiki\/doku.php\/custom_report_pivot_table_views\">Custom Report Pivot Table Views<\/a>\u00a0section.<\/p>\n<\/div>\n<h2 id=\"creating_user_specific_reports\" class=\"sectionedit9\">Creating User Specific Reports<\/h2>\n<div class=\"level2\">\n<p><code>{UserId}<\/code>\u00a0and\u00a0<code>{UserName}<\/code>\u00a0tags replaces with logged user information inside SQL scripts so you can create reports specific to logged in user.<\/p>\n<table style=\"height: 263px;\" width=\"697\">\n<tbody>\n<tr>\n<td style=\"width: 687px;\">\n<pre class=\"code sql\"><span style=\"font-size: 10pt;\"><span class=\"kw1\">SELECT<\/span>    \r\n    T<span class=\"sy0\">.<\/span>TicketNumber<span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">105<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CONVERT<\/span><span class=\"br0\">(<\/span>nvarchar<span class=\"sy0\">,<\/span>T<span class=\"sy0\">.<\/span>Date<span class=\"sy0\">,<\/span><span class=\"nu0\">108<\/span><span class=\"br0\">)<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"kw1\">TIME<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span>Customer Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">COALESCE<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span><span class=\"kw1\">CASE<\/span> <span class=\"kw1\">WHEN<\/span> TE<span class=\"sy0\">.<\/span>EntityTypeId <span class=\"sy0\">=<\/span> <span class=\"nu0\">2<\/span> <span class=\"kw1\">THEN<\/span> TE<span class=\"sy0\">.<\/span>EntityName <span class=\"kw1\">ELSE<\/span> <span class=\"kw1\">NULL<\/span> <span class=\"kw1\">END<\/span><span class=\"br0\">)<\/span><span class=\"sy0\">,<\/span><span class=\"st0\">'-'<\/span><span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> <span class=\"br0\">[<\/span><span class=\"kw1\">TABLE<\/span> Name<span class=\"br0\">]<\/span><span class=\"sy0\">,<\/span>    \r\n    <span class=\"kw1\">MIN<\/span><span class=\"br0\">(<\/span>T<span class=\"sy0\">.<\/span>TotalAmount<span class=\"br0\">)<\/span> <span class=\"kw1\">AS<\/span> TotalAmount    \r\n<span class=\"kw1\">FROM<\/span> Tickets <span class=\"kw1\">AS<\/span> T    \r\n    <span class=\"kw1\">LEFT<\/span> <span class=\"kw1\">OUTER<\/span> <span class=\"kw1\">JOIN<\/span> TicketEntities <span class=\"kw1\">AS<\/span> TE <span class=\"kw1\">ON<\/span> TE<span class=\"sy0\">.<\/span>Ticket_Id <span class=\"sy0\">=<\/span> T<span class=\"sy0\">.<\/span>Id    \r\n<span class=\"kw1\">WHERE<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"st0\">'{Start}'<\/span> <span class=\"kw1\">AND<\/span> <span class=\"kw1\">DATE<\/span> <span class=\"sy0\">&lt;<\/span> <span class=\"st0\">'{End}'<\/span> <span class=\"kw1\">AND<\/span> T<span class=\"sy0\">.<\/span>LastModifiedUserName <span class=\"sy0\">=<\/span> <span class=\"st0\">'{UserName}'<\/span>\r\n<span class=\"kw1\">GROUP<\/span> <span class=\"kw1\">BY<\/span> T<span class=\"sy0\">.<\/span>TicketNumber    \r\n<span class=\"kw1\">ORDER<\/span> <span class=\"kw1\">BY<\/span> <span class=\"kw1\">DATE<\/span><span class=\"sy0\">,<\/span><span class=\"kw1\">TIME<\/span><\/span><\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>This script will always return ticket list for logged in user. So each user will see \/ print their own report.<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><code><\/code><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Adding SQL Scripts You can display result of an SQL Script in custom reports. If SQL Scripts returns a single value you can use it as a cell value. If it returns multiple values that will be formatted as a table row. In other words SQL result will be converted to a list where each [&hellip;]<\/p>\n","protected":false},"author":11,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"class_list":["post-13937","post","type-post","status-publish","format-standard","hentry","category-reports"],"_links":{"self":[{"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/posts\/13937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/comments?post=13937"}],"version-history":[{"count":9,"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/posts\/13937\/revisions"}],"predecessor-version":[{"id":14977,"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/posts\/13937\/revisions\/14977"}],"wp:attachment":[{"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/media?parent=13937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/categories?post=13937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kb.sambapos.com\/en\/wp-json\/wp\/v2\/tags?post=13937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}