select deptno from (select dname,deptno,loc from dept) unpivot(dname for loc in('NEW YORK','DALLAS','CHICAGO','BOSTON'))这段代码哪有问题?该如何修改
时间: 2024-09-28 17:16:38 浏览: 35
最简单的Oracle数据恢复 select as of使用方法
这段SQL代码试图从`dept`表中选择部门编号 (`deptno`),并利用`UNPIVOT`操作将`dname`字段拆分为四个不同的列(`NEW YORK`, `DALLAS`, `CHICAGO`, `BOSTON`),每个对应一个特定的城市。然而,`UNPIVOT`通常是在数据库支持跨行转换数据时使用的,如Oracle、SQL Server等,而标准的SQL(如MySQL、PostgreSQL等)并没有直接提供这种语法。
在不支持`UNPIVOT`的标准SQL中,你可以通过创建临时表或者使用`CASE`语句来达到类似的效果。例如,在MySQL中可以这样做:
```sql
SELECT deptno
FROM (
SELECT deptno, dname, loc,
CASE loc
WHEN 'NEW YORK' THEN 'NY'
WHEN 'DALLAS' THEN 'DAL'
WHEN 'CHICAGO' THEN 'CHI'
WHEN 'BOSTON' THEN 'BOS'
ELSE NULL
END AS city
FROM dept
) temp
```
这里将城市名替换为固定的别名(如'NY', 'DAL', 'CHI', 'BOS'),然后筛选出对应的值。
阅读全文