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

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

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

Все другие возможные СУБЪЕКТЫ заблокированы, потому что пользователи должны выбрать их из выпадающего списка, именно этот экземпляр вызывает это уникальное значение. Я пытаюсь измерить производительность разных пользователей по количеству создаваемых заметок и по типам заметок.

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

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

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

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

Прямо сейчас это генерирует это:

current

Но я бы хотел это:

desired

0
user12400282 6 Фев 2020 в 03:56

2 ответа

Лучший ответ

Вы можете использовать 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'
2
Nick 6 Фев 2020 в 01:03

Ниже приведен упрощенный шаблон, который затем можно настроить в операторе 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
0
Martin Cairney 6 Фев 2020 в 01:03