【问题标题】:Replacing the output value after a select T-SQL在选择 T-SQL 之后替换输出值
【发布时间】:2018-06-29 04:07:26
【问题描述】:

我有一个从两个不同数据库中选择记录的查询。我的查询有效,它显示了我想要的数据,但利益相关者希望将特定字段转换为不同的答案,以便他们在收到 SSRS 报告后不必在 Excel 中操作这一行。

对于这个问题,我更改了表名等并使查询更简单(我的包含更多列),但一般概念是相同的。

表:tLive1tCodes

SELECT
        tLive1.cClientName AS 'Client Name'
       ,tLive1.cPolicynum AS 'Policy Number'
       ,tCodes.nStatus AS 'Status'

FROM tLive1 WITH (NOLOCK)
LEFT JOIN tCodes WITH (NOLOCK) ON tLive1.nStat = tCodes.nStatus

WHERE tLive1.nStat LIKE 'In Progress'

ORDER BY 'Client Name'

我的问题是 tCodes.nStatus 有一个内部描述,销售人员不希望其他人看到,他们宁愿将“进行中”变成“工作中”等等。

我尝试使用 CASE,但我不知道在哪里插入 CASE 而不会导致错误。

我试过了:

SELECT
        tLive1.cClientName AS 'Client Name'
       ,tLive1.cPolicynum AS 'Policy Number'
       --,tCodes.nStatus AS 'Status'
       ,( SELECT CASE nStatus
         WHEN 'Assigned' THEN 'Someone has it'
         ELSE 'XXX'
         END AS 'Status'
         FROM tCodes
        )


FROM tLive1 WITH (NOLOCK)
LEFT JOIN tCodes WITH (NOLOCK) ON tLive1.nStat = tCodes.nStatus

WHERE tLive1.nStat LIKE 'In Progress'

ORDER BY 'Client Name'

【问题讨论】:

    标签: sql tsql select case


    【解决方案1】:

    你可以像这样直接在 select 中添加你的 case 语句:

    SELECT tLive1.cClientName AS 'Client Name',
        tLive1.cPolicynum AS 'Policy Number',
        CASE WHEN tCodes.nStatus = 'In Progress' THEN 'Working' 
            WHEN tCodes.nStatus = 'Assigned' THEN 'Someone has it' 
            ELSE tCodes.nStatus END  AS 'Status'
    FROM tLive1 WITH (NOLOCK) LEFT JOIN tCodes WITH (NOLOCK) ON tLive1.nStat = tCodes.nStatus
    WHERE tLive1.nStat LIKE 'In Progress'
    ORDER BY 'Client Name'
    

    您可以添加尽可能多的 WHEN 语句来涵盖所有需要的转换。

    【讨论】:

    • 工作就像一个魅力莱尼,非常感谢。我不得不添加:ELSE CAST (tcodes.nStatus AS CHAR(1)) 因为如果不是我得到一个 tinyint 错误,但在那之后和你的解决方案我现在很清楚了。一百万谢谢。
    • @RogelioHernandez,请按“接受”按钮以引导未来用户获得这个有用的答案,并在适当的时候给予表扬。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2013-05-21
    • 2012-02-12
    • 1970-01-01
    • 2019-12-16
    • 2011-10-19
    相关资源
    最近更新 更多