Как выполнить сортировку по CASE (обычно заканчивающейся на «X») при построении хранимой процедуры для электронной почты в формате HTML? - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь создать SP для отправки отчета в формате HTML, отсортированного по новым значениям в моем операторе CASE WHEN.Как правило, СЛУЧАЙ, КОГДА МОЖЕТ ЗАКОНЧИТЬСЯ «Статусом партии», тогда я мог бы заказать по «Статусу партии», но это не работает в формате HTML.Сортировка по статусу не работает для меня, так как статус является числовым, и мне нужно это отсортировать по буквенно-цифровым.

SET NOCOUNT ON

DECLARE @Last3BusinessDays as DATETIME, @tableHTML NVARCHAR(MAX)

SET @Last3BusinessDays = (SELECT DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7 
                                                                                  WHEN 1 THEN -4 
                                                                                  WHEN 2 THEN -5 
                                                                                  ELSE -3 
                                                                             END, 
                                                                      GETDATE()))

If (SELECT count(aq.batchnum) FROM hsi.archivedqueue aq
WHERE aq.status != 8
AND datestarted < @Last3BusinessDays
AND aq.queuename like 'HIM%'
       OR aq.queuename = 'MHHS'
       OR aq.queuename = 'DX Summaries'
       OR aq.queuename = 'HCA') > 0

BEGIN

SET @tableHTML = 
N'<H3>The following HIM scans have not been committed in over 72 hours. Please index ASAP.</H3>' +
              N'<table border="1">' +
              N'<th>Batch #</th>' +
              N'<th>Batch Name</th>' +
              N'<th>Scan Date-Time</th>' +
              N'<th>Status Queue</th>' +
              N'<th>Total Documents</th>' +
              CAST ( ( 
                        SELECT
                                                td = batchnum, '', 
                                                td = rtrim(batchname), '', 
                                                td = datestarted, '', 
                                                td = case 
                                                              when status = 44 then 'Awaiting Bar Code Processing'
                                                              when status = 32 then 'Awaiting QA Review'
                                                              when status = 23 then 'Awaiting Document Separation'
                                                              when status = 1 then 'Index in Progress'
                                                              when status = 0 then 'Awaiting Index'
                                                              else 'Other'
                                                       end,  '',
                                                td = totaldocuments, ''
                                                FROM OB_PRD.hsi.archivedqueue
                                                WHERE status != 8
                                                AND datestarted < @Last3BusinessDays
                                                AND (queuename like 'HIM%'
                                                       OR queuename = 'MHHS'
                                                       OR queuename = 'DX Summaries'
                                                       OR queuename = 'HCA')

                                                ORDER BY status, datestarted DESC
               FOR XML PATH('tr'), TYPE
              ) AS NVARCHAR(MAX) ) +
              N'</table>'

Сортировка по новым буквенно-цифровым значениям в СЛУЧАЕ, КОГДА это цель.В настоящее время состояние ORDER BY сортируется по числовому значению, которое не является оптимальным.

1 Ответ

1 голос
/ 03 июня 2019

Я бы переместил CASE в FROM как предложение VALUES, так как тогда вы можете легко ссылаться на него в ORDER BY:

                  SELECT td = aq.batchnum, '', 
                         td = rtrim(aq.batchname), '', 
                         td = aq.datestarted, '', 
                         td = V.[status],  '',
                         td = totaldocuments, ''
                         FROM OB_PRD.hsi.archivedqueue aq
                              CROSS APPLY (VALUES(CASE WHEN [status] = 44 THEN 'Awaiting Bar Code Processing'
                                                       WHEN [status] = 32 THEN 'Awaiting QA Review'
                                                       WHEN [status] = 23 THEN 'Awaiting Document Separation'
                                                       WHEN [status] = 1 THEN 'Index in Progress'
                                                       WHEN [status] = 0 THEN 'Awaiting Index'
                                                       ELSE 'Other'
                                                   END))V ([Status])
                         WHERE aq.status != 8
                         AND aq.datestarted < @Last3BusinessDays
                         AND (aq.queuename like 'HIM%'
                                OR aq.queuename = 'MHHS'
                                OR aq.queuename = 'DX Summaries'
                                OR aq.queuename = 'HCA')

                         ORDER BY v.[status], aq.datestarted DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...