2016-01-19 129 views
0

这里是我的查询:CASE语句ALIAS比较

SELECT DISTINCT v.codi, m.nom, v.matricula, v.data_compra, v.color, 
v.combustible, v.asseguranca, 
(CASE WHEN lloguer.dataf IS NOT NULL THEN 'Si' ELSE 'Llogat' END) AS Disponible 
FROM vehicle v 
INNER JOIN model m on model_codi=m.codi 
INNER JOIN lloguer on codi_vehicle=v.codi 
WHERE Disponible='Si'; 

我试图做的是只显示有“lloguer.dataf”那些行不为空,但它并不alow我使用“Disponible”别名来做最后一行比较。

我该怎么办?

这是如何显示信息(与一些更多的属性)没有最后一行比较。

enter image description here

+2

使用'WHERE lloguer.dataf它不是INSTEAD NULL' – JamieD77

+1

难道你不能简单地写'在哪里lloguer.dataf IS NOT NULL'? – Aleksej

回答

1

我生性是一个TSQL的家伙,但你可以做到这一点?

Select distinct codi, nom,matricula, data_compra, colour, combustible, asseguranca from 
(SELECT DISTINCT v.codi, m.nom, v.matricula, v.data_compra, v.color, 
v.combustible, v.asseguranca, 
(CASE WHEN lloguer.dataf IS NOT NULL THEN 'Si' ELSE 'Llogat' END) AS Disponible 
FROM vehicle v 
INNER JOIN model m on model_codi=m.codi 
INNER JOIN lloguer on codi_vehicle=v.codi) 
WHERE Disponible='Si'; 

如@JuanCarlosOropeza所指出的,该别名不存在直到数据是最初取出。这就是为什么您可以在不使用子查询的情况下使用order by子句中的别名,但不能在where子句中使用别名,因为尚未提取数据。

+0

一个小问题的解释会很棒。 –

+0

@JuanCarlosOropeza - 我现在补充一些。 –

1

更多细节从SELECT块删除你的CASE WHEN并将其替换您的WHERE子句:

WHERE lloguer.dataf IS NOT NULL