SQL Сервер: случай, когда оператор в запросе использует LEFT (xxx, 15) - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть запрос, над которым я работаю в Microsoft SQL Server Management Studio, и я не уверен, как выполнить sh что-то.

Вот текущий запрос:

SELECT DISTICNT 
    PRONOTES.CPK,
    REPLACE(PRONOTES.SUBJECT, ',','') AS SUBJECT,
    PRONOTES.CREATOR,
    PRONOTES.DATE_CREATED
FROM 
    PRONOTES
WHERE 
    DATE_CREATED BETWEEN '2020-01-01' AND '2020-01-31'

Моя проблема заключается в том, что программное обеспечение создает СУБЪЕКТ, который включает номер рецепта при прекращении заказа. Таким образом, я получаю результаты в столбце SUBJECT, которые выглядят так:

Discontinued RX #2341241341
Discontinued RX #23455859900

Все другие возможные SUBJECTS заблокированы, потому что пользователи должны выбрать их из выпадающего списка, именно этот экземпляр вызывает это уникальное значение. Я пытаюсь измерить производительность разных пользователей по количеству создаваемых заметок и по типам создаваемых заметок.

Мне бы хотелось, чтобы в результатах просто отображалось «Прекращенный прием», а не число, поэтому что когда это будет отправлено в Excel и будет создана сводная таблица, не будет миллиона строк из-за уникальности этого номера рецепта.

Я не могу сделать это простым:

LEFT(REPLACE(PRONOTES.SUBJECT, ',', ''), 15)

, потому что тогда я потеряю слишком много данных из других предметов, поэтому мне было интересно, как это сделать в случае, когда или если есть какой-то другой лучший способ. Я подумал, может быть, модификацию так, чтобы отрубались только объекты, начинающиеся со слов «Прекращенный прием».

Сейчас он генерирует это:

current

Но я вот так:

desired

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Вы можете использовать выражение CASE для SUBJECT, чтобы при запуске с Discontinued RX отображалось все:

SELECT DISTINCT
    PRONOTES.CPK,
    CASE WHEN LEFT(PRONOTES.SUBJECT, 15) = 'Discontinued RX' THEN 'Discontinued RX'
         ELSE REPLACE(PRONOTES.SUBJECT, ',','')
    END AS SUBJECT,
    PRONOTES.CREATOR,
    PRONOTES.DATE_CREATED
FROM PRONOTES
WHERE DATE_CREATED BETWEEN '2020-01-01' AND '2020-01-31'
0 голосов
/ 06 февраля 2020

Ниже приведен упрощенный шаблон c, который можно при необходимости настроить в операторе CASE в операторе SELECT.

DECLARE @test varchar(100) = 'Discontinued RX #2341241341 Discontinued RX #23455859900'

SELECT CASE WHEN PATINDEX('Discontinued RX #%', @test) > 0 THEN 'Replace' ELSE 'Keep' END
...