繁体   English   中英

在子查询中将行转换为列

[英]Convert rows into columns in sub-query

我试图在像这样的子查询查询中将行转换为列时:

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至少会有三个选择。

  1. 将子选择移到有子句的子句中,然后加入子句。
  2. 使用两个子选项,一个选择容量,一个选择停车。
  3. 将子选择移至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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM