【问题标题】:Implementing Case in TSQLSQL中的实现案例
【发布时间】:2013-10-16 12:29:06
【问题描述】:

大家好,我有这个问题:

SELECT B.fld_ActionName,
    ISNULL(A.COUNT, 0) count,
    ISNULL(A.GRAMS, 0) grams,
    ISNULL(A.PRINCIPAL, 0) principal
FROM #PULLEDOUT A
RIGHT JOIN Reference.tbl_RefAction B
    ON A.OSD = B.fld_ActionID
WHERE B.fld_ActionID IN (100, 200, 360, 454, 457)

我希望将B.fld_ActionName 上的单词从和转换为如下

New         (still the same no change)
Checked     (still the same no change)
For Recall -->recall
EL -->indexed EL
Watch -->Scrap watch

有可能吗?如果是,那怎么办?我真的不知道 case 是否适用于此,我是 TSQL 新手,我不知道如何实现它。

谢谢

【问题讨论】:

标签: sql tsql sql-server-2008-r2 case


【解决方案1】:
SELECT 
    CASE
        WHEN B.fld_ActionName IN ('New','Checked') THEN B.fld_ActionName
        WHEN B.fld_ActionName 'For Recall' THEN 'recall'
        WHEN B.fld_ActionName 'EL' THEN 'indexed EL'
        WHEN B.fld_ActionName 'Watch' THEN 'Scrap watch'
    END,
    ISNULL(A.COUNT,0) count,
    ISNULL(A.GRAMS,0) grams,
    ISNULL(A.PRINCIPAL,0) principal
FROM #PULLEDOUT A
     RIGHT JOIN Reference.tbl_RefAction B
         ON A.OSD =B.fld_ActionID
WHERE B.fld_ActionID in (100,200,360,454,457)

【讨论】:

  • 如何在 select 语句中实现它?
  • @AsshO.Le 复制粘贴声明?
  • @AsshO.Le 我已经编辑了完整 SQL 语句的答案。看看吧。
【解决方案2】:

试试这个:

SELECT
  CASE b.fld_ActionName
   WHEN 'For Recall' THEN 'recall'
   WHEN 'EL' THEN 'indexed EL'
   WHEN 'Watch' THEN 'Scrap watch'
   ELSE b.fld_ActionName 
  END AS 'Action',
  ISNULL(A.COUNT,0) AS 'count',
  ISNULL(A.GRAMS,0) AS 'grams',
  ISNULL(A.PRINCIPAL,0) AS 'principal' 
FROM #PULLEDOUT A
RIGHT JOIN Reference.tbl_RefAction B
ON A.OSD =B.fld_ActionID
WHERE B.fld_ActionID in (100,200,360,454,457)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多