T-SQL中的If-Else语句

时间:2010-08-17 21:47:24

标签: sql sql-server tsql syntax

我正在尝试更改当前显示的Transact-SQL(MS SQL Server)报告的结果:

CompanyA     DVCE3
CompanyB     DVCE2
CompanyC     DVCE3
CompanyD     NULL 
CompanyE     DVCE3

我希望它显示:

CompanyA     36
CompanyB     24
CompanyC     36
CompanyD      
CompanyE     36

我确定这个问题的答案是使用某种if / else语句或case语句,但我不确定T-SQL中的语法或它应该放在我的查询中。

我的基本查询如下:

SELECT
   companyName
   , term
FROM tableA a
   JOIN tableB b on a.id = b.id ...
WHERE 
   customerNumber IS NOT NULL
   AND companyName != 'TEST'... ;

感谢您的帮助。

3 个答案:

答案 0 :(得分:5)

使用以下内容替换“term”字段:

CASE WHEN term='DVCE3' THEN '36' WHEN term='DVCE2' THEN '24' ELSE '' END as term

为了便于阅读,我会重写它:

CASE
    WHEN term='DVCE3' THEN '36'
    WHEN term='DVCE2' THEN '24'
    ELSE ''
END as term

答案 1 :(得分:4)

如果您只有一些替换品,可以将它们粘贴在case声明中,如下所示。

SELECT
   companyName
   ,CASE term WHEN  'DVCE3' THEN '36' WHEN 'DVCE2' THEN '24' ELSE '' END AS term
FROM tableA a
   JOIN tableB b on a.id = b.id ...
WHERE 
   customerNumber IS NOT NULL
   AND companyName != 'TEST'... ;

如果您有更多或者您将在其他查询中重复此逻辑,您可以设置一个映射表(永久表,视图或内联TVF),然后您可以加入。

答案 2 :(得分:1)

Case语句将起作用。但是,更好的答案可能是将数据放入表中并进行连接或将其放入公司表中的字段中。从长远来看,这使得它更具有可扩展性。

CREATE TABLE CompanyTerms (
    id INT,
    CompanyName NVARCHAR(100) NOT NULL, 
    Term NVARCHAR(100) NULL
)

...

SELECT
   companyName
   , c.Term
FROM tableA a
   JOIN tableB b on a.id = b.id ...
   JOIN CompanyTerm c ON c.id = a.id
WHERE 
   customerNumber IS NOT NULL
   AND companyName != 'TEST'... ;