我正在尝试更改当前显示的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'... ;
感谢您的帮助。
答案 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'... ;