如何从我的结果中删除CASE语句?



我正在编写一个查询来返回一些信息,但是存储过程不会返回页面中的结果,因为值不匹配表定义。我理解这个错误。但我正在使用case语句来过滤基于一个字段(是否收到t.t emecallwasreceived)。当我这样做时,它允许sp在用户检查db更改或使用signalR检测db更改时运行。我不希望CASE语句成为我的结果的一部分。我知道我可以修改页面或临时表,但我想知道是否可以在t-sql中执行任何操作来返回结果,而不需要在上述结果中使用case语句。查询如下:

SELECT DISTINCT
c.Num,
'Notified for pickup ' + (CONVERT(varchar(30), c.ServiceCalled, 100)) + '. Number ' + c.Num AS Issue,
RTRIM(c.NameFirst) + ' ' + RTRIM(c.NameLast) AS CusName,
(CASE
WHEN t.TimeCallWasReceived IS NULL THEN CONVERT(varchar(20), t.TimeCallWasReceived, 113)
ELSE 'NO'
END) AS CallReceivedAt
FROM tblCustomer c
LEFT JOIN tblTransportation t ON t.Num = c.Num
WHERE t.TimeCallWasReceived IS NULL
AND c.Type = 'Type1'
AND c.ServiceCalled IS NOT NULL
AND c.TransportNum IS NULL
AND LEFT(c.Num, 2) <> 'CR'
AND LEFT(c.Num, 2) <> 'TR'
AND (c.Status <> 'Void'
OR c.Status <> 'Closed')
AND ((DATEDIFF(MINUTE, c.ServiceCalled, GETDATE())) > 180)
AND c.Type <> 'VOID'
AND c.Type <> 'NON'
AND c.Type <> 'Walk-In'
AND c.Type <> 'CFR'
AND c.CaseType <> 'PAP'
AND c.ServiceCalled >= DATEADD(DAY, -2, GETDATE())
ORDER BY c.Num DESC;
--1. Since the WHERE clause has `t.TimeCallWasReceived IS NULL`, you will see only ---'NO' in the CallReceivedAt result column.
--2. Since the WHERE clause has `c.Type = 'Type1'`, it makes unnecessary to look for 
c.Type <> 'VOID'
c.Type <> 'NON'
c.Type <> 'Walk-In'
c.Type <> 'CFR'
--because they are exclusive for the rest of the values different than 'Type1'.
--3. I don't see a way to get rid of the CASE
--    Perhaps you like this way better:

CASE ISNULL(t.TimeCallWasReceived, '')
WHEN '' THEN CONVERT(varchar(20), t.TimeCallWasReceived, 113)
ELSE 'NO'
END

最新更新