【问题标题】:use CASE statement and QUOTENAME together一起使用 CASE 语句和 QUOTENAME
【发布时间】:2018-01-02 16:26:07
【问题描述】:

我遇到了 SQL Server 的 SQL 查询问题。

我有一个类似的查询。

SELECT QUOTENAME(A, '"'),
 QUOTENAME(B, '"'),
 QUOTENAME(C, '"')

FROM TABLENAME

现在,我必须用 CASE 语句替换它。

现在这个查询可以工作了 -

SELECT A,
CASE
WHEN B='Thank you' then 'TY'
WHEN B='No Problem' then 'NP'
WHEN B='As soon as possible' then 'ASAP'
END AS B,
C
FROM TABLENAME

现在我使用 QUOTENAME 是因为我想用双引号将字段括起来。任何可能的情况,我如何混合 QUOTENAME 和 CASE 语句。到目前为止,无论我尝试过什么都会引发语法错误。

【问题讨论】:

  • 只要使用SELECT QUOTENAME(CASE WHEN ..... WHEN ..... END, '"') as B

标签: sql-server sql-server-2008 sql-server-2012 case


【解决方案1】:

应该像这样工作

SELECT A,
       CASE
         WHEN B='Thank you' then QUOTENAME('TY', '"')
         WHEN B='No Problem' then QUOTENAME('NP', '"')
         WHEN B='As soon as possible' then QUOTENAME('ASAP', '"')
       END AS B,
       C
FROM TABLENAME

或者更短

SELECT A,
       QUOTENAME( CASE
                    WHEN B='Thank you' then 'TY'
                    WHEN B='No Problem' then 'NP'
                    WHEN B='As soon as possible' then 'ASAP'
                  END, '"') AS B,
       C
FROM TABLENAME

【讨论】:

  • 感谢@GuidoG。效果很好!而且,现在当我看到您的查询时,我可以理解我做错了什么。有时候我真的很傻。
【解决方案2】:

与 GuidoG 解决方案相比,这也可能更短一些:

SELECT A
  , QUOTENAME(CASE B
                  WHEN 'Thank you' THEN 'TY'
                  WHEN 'No Problem' THEN 'NP'
                  WHEN 'As soon as possible' THEN 'ASAP'
              END, '"') AS B
  , C
FROM TABLENAME;

如果你总是比较单个列的相等性,你可以写CASE COLUMN_NAME,然后像这样进行比较:WHEN 1 THEN 'LOL1' WHEN 2 THEN 'LOL2' 等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    相关资源
    最近更新 更多