sql - 根据存储过程返回的列值显示消息
问题描述
我想创建一个存储过程,它根据表中的数据返回不同的消息。这是我当前的存储过程的样子:
ALTER PROCEDURE [dbo].[sp_GETLIST_ACC]
@per_id int
AS
BEGIN
SET NOCOUNT ON;
DECLARE @status varchar(10)
SELECT @status = req_status
FROM TOL_FILE_REQUEST
WHERE per_id = @per_id
IF @status = 'A'
BEGIN
SET @status = 'Approved'
END
ELSE IF @status = 'P'
BEGIN
SET @status = 'Pending'
END
SELECT
req_id,
file_no,
req_status,
FROM
TOL_FILE_REQUEST
WHERE
per_id = @per_id
END
桌子是这个
req_id | file_no | req_status
-------+----------+-----------
6 | AS000001 | A
10 | AS000002 | P
11 | AS000003 | A
12 | AS000004 | A
13 | AS000005 | A
但是在执行存储过程之后,我得到了以下内容:
req_id | file_no | req_status
-------+----------+-----------
6 | AS000001 | Approved
10 | AS000002 | Approved
11 | AS000003 | Approved
12 | AS000004 | Approved
13 | AS000005 | Approved
但我需要的是:
req_id | file_no | req_status
-------+----------+-----------
6 | AS000001 | Approved
10 | AS000002 | Pending
11 | AS000003 | Approved
12 | AS000004 | Approved
13 | AS000005 | Approved
据我了解,req_status
以下是最新插入的数据。但为什么?我能做些什么来克服这个问题?我尝试使用游标进行迭代并使用计数器,但它执行了多次。
提前致谢!
解决方案
只需在一个声明中完成所有操作CASE
。
ALTER PROCEDURE [dbo].[sp_GETLIST_ACC]
@per_id int
AS
BEGIN
SET NOCOUNT ON;
SELECT req_id,
file_no,
CASE req_status
WHEN 'A' THEN 'Approved'
WHEN 'P' THEN 'Pending'
ELSE 'Unknown'
END as req_status
FROM TOL_FILE_REQUEST
WHERE per_id = @per_id
END
推荐阅读
- angular - 角度模式指令无法按预期工作
- python - 如何加快我的 Pandas 地理距离计算?
- jquery - 如果单击选择器,则触发警报
- ethereum - truffle migrate --network "name_of_my_network" 永远挂着
- reactjs - 无法删除滚动侦听器
- java - hibernate - 带有 getEntityManager..createNativeQuery() 的 NullPointerException
- sql - SQL:将列转换为行
- javascript - 如何在js中计算分数测验?
- python - 有预训练的 Gensim 短语模型吗?
- apache-spark - explode 和explode_outer 的区别