CASE 语句 ALIAS 比较
CASE statement ALIAS comparison
这是我的查询:
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" 不是 NULL 的行,但它不允许我使用 "Disponible" 别名来做最后一个行比较。
我能做什么?
这是在没有最后一行比较的情况下显示信息的方式(具有更多属性)。
我天生就是一个 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 子句中使用别名的原因,因为尚未获取数据。
问题是别名还不存在。所以你必须重复完整的代码或创建一个子查询。
SELECT *
FROM ( .... ) YourQuery
WHERE Disponible='Si';
您可以在此处阅读更多详细信息https://community.oracle.com/thread/1109532?tstart=0
从 SELECT 块中删除 CASE WHEN 并将 WHERE 子句替换为:
WHERE lloguer.dataf IS NOT NULL
这是我的查询:
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" 不是 NULL 的行,但它不允许我使用 "Disponible" 别名来做最后一个行比较。
我能做什么?
这是在没有最后一行比较的情况下显示信息的方式(具有更多属性)。
我天生就是一个 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 子句中使用别名的原因,因为尚未获取数据。
问题是别名还不存在。所以你必须重复完整的代码或创建一个子查询。
SELECT *
FROM ( .... ) YourQuery
WHERE Disponible='Si';
您可以在此处阅读更多详细信息https://community.oracle.com/thread/1109532?tstart=0
从 SELECT 块中删除 CASE WHEN 并将 WHERE 子句替换为:
WHERE lloguer.dataf IS NOT NULL