在子查询中将行转换为列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在子查询中将行转换为列相关的知识,希望对你有一定的参考价值。
我在子查询查询中使用它时尝试将行转换为列,如:
select distinct
bqtID, bqtName, bqtCity, bqtStatus, bqtManagerName,
(select
max(case when serName = 'Capacity' then serStatus end) Capacity,
max(case when serName = 'Parking' then serStatus end) Parking
from
tblService
where
serBqtID = bqtID),
from
View_BanquetList
where
bqtID = 1
我收到此错误:
当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。
当我单独使用它然后它工作:
select
max(case when serName = 'Capacity' then serStatus end) Capacity,
max(case when serName = 'Parking' then serStatus end) Parking
from
tblService
where
serBqtID = 1
结果:
Capacity Parking
-------- -------
101-200 51-100
为什么在子查询中没有将多行转换为列?
答案
您试图在选择列表中将两列作为一列返回。这不起作用。我不是SQL Server的专家,但对于Oracle,至少会有三个选项。
- 将子选择移动到with子句,然后与其连接。
- 使用两个子选项,一个用于容量,一个用于停车。
- 将子选择移动到from子句并使用成为表的子选择,然后将其连接。
我认为所有这些都应该与SQL Server一起使用。选项3最接近你现在拥有的。
编辑:试试这个:
select distinct
v.bqtID, v.bqtName, v.bqtCity, v.bqtStatus, v.bqtManagerName,
t.Capacity, t.Parking
from
(select
serBqtID,
max(case when serName = 'Capacity' then serStatus end) Capacity,
max(case when serName = 'Parking' then serStatus end) Parking
from
tblService
group by
serBqtID) t
inner join
View_BanquetList v on t.serBqtID = v.bqtID
where
v.bqtID = 1
以上是关于在子查询中将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章