【发布时间】:2014-08-07 18:40:22
【问题描述】:
我有以下查询,它给我一个错误“当子查询没有与 EXISTS 一起引入时,只能在选择列表中指定一个表达式”。我无法弄清楚这在技术上有什么问题。
select clinicid,
DATEPART(YEAR,CONVERT(date,PackagePatients.SaleDate )) as YEAR,
DATEPART(MONTH,CONVERT(date,PackagePatients.SaleDate )) as MONTH,
REPLACE(RIGHT(CONVERT(VARCHAR(9),PackagePatients.SaleDate, 6), 6), ' ', '-') AS SalMonYY,
(select rpTotal.clinicid,SUM(rpTotal.rpPackage) as rpPackage from
(
select clinicid, count(1) as rpPackage
from PackagePatients
WHERE PackagePatients.clinicid = clinicid
AND convert(date,patientdate) < convert(date,saledate)
group by clinicid
union all
select s.homeClinicId as clinicid,COUNT(1) as rpPackage
from subscriptionHistory s
join patients p on s.ptientId = p.id
join products pl on s.productId = pl.id
WHERE s.HomeClinicId = clinicid
and pl.expDuration > 1
group by s.homeClinicId) rpTotal group by rpTotal.clinicid) AS rpPackagesSold
from PackagePatients
group by clinicid,
DATEPART(YEAR,CONVERT(date,PackagePatients.SaleDate )),
DATEPART(MONTH,CONVERT(date,PackagePatients.SaleDate )),
REPLACE(RIGHT(CONVERT(VARCHAR(9),PackagePatients.SaleDate, 6), 6), ' ', '-')
【问题讨论】:
-
您有一个子查询用作列,但子查询定义了多个列。您应该重写整个查询,而是加入子查询。
-
表达式
(select rpTotal.clinicid,SUM(rpTotal.rpPackage)有两列。它是在允许标量子查询的上下文中,但标量子查询最多只能从一行返回一列。 -
@SeanLange 但是我的子查询有一个联合子句,所以如果我加入子查询,我无法弄清楚如何解决这个问题
-
联合不是问题......好吧,除非该查询还返回超过 1 行。问题是您将子查询用作列,但它定义了两列。它怎么知道你想要哪一个?
标签: sql sql-server