代码之家  ›  专栏  ›  技术社区  ›  Rick Starsky

用例语句和QUOTENAME一起使用

  •  1
  • Rick Starsky  · 技术社区  · 7 年前

    我面临SQL Server的SQL查询问题。

    我有一个类似这样的问题。

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

    现在,我必须用一个案例陈述来代替它。

    现在,此查询工作正常-

    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语句。到目前为止,无论我尝试了什么,都会抛出一个语法错误。

    2 回复  |  直到 7 年前
        1
  •  2
  •   GuidoG    7 年前

    应该像这样工作

    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
    
        2
  •  0
  •   Evaldas Buinauskas    7 年前

    与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' 等等。