SQL 服务器:使用 LEFT(xxx,15) 的查询中的 case when 语句

SQL Server : case when statement in query using LEFT(xxx,15)

我有一个正在 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

所有其他可能的主题都被锁定,因为用户必须 select 从下拉列表中选择它们,正是这个实例导致了该唯一值。我试图通过他们创建的笔记数量和创建的笔记类型来衡量不同用户的工作效率。

我希望结果只显示 "Discontinued RX" 而不是包括数字,这样当它被运送到 excel 并创建一个枢轴 table 时,那里赢了由于该处方编号的唯一性,因此成为一百万行。

我不能用简单的:

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

因为那样我会丢失太多来自其他主题的数据,所以我想知道如何在有其他更好方法的情况下处理这个问题。我想也许可以修改,以便只有以单词 "Discontinued Rx" 开头的主题才会被切掉。

现在它生成这个:

但我想要这样:

以下是一个简单的模式,您可以根据需要将其调整为 SELECT 语句中的 CASE 语句。

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

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

您可以在 SUBJECT 上使用 CASE 表达式,这样当它以 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'