SQL Server SubSelect语法错误

时间:2013-07-12 16:53:45

标签: sql sql-server subquery

我正在尝试执行一个子选择查询,但它给了我一个错误,我不确定我是否可以做这种逻辑。

SELECT (SELECT SERV_ACCT, ACCOUNT, SERV_ADDRESS
FROM tblAPSData

JOIN tblMEP_Meters
ON tblMEP_Meters.ServiceAccount = tblAPSData.SERV_ACCT

WHERE SERV_Acct = ServiceAccount
AND INV_DATE > DATEADD(month, -6, getdate())
GROUP BY SERV_ACCT, ACCOUNT, SERV_ADDRESS
HAVING count(SERV_ACCT) = 1) AS AccountMeter

FROM tblMEP_Customers

这是错误信息: Msg 116,Level 16,State 1,Line 48 当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。

我也有这个代码编译没有任何问题,我使用相同的逻辑,但不知道为什么它不工作。 这段代码在我运行时有效:

SELECT SiteName = tblMEP_Sites.Name, BillingMonth = DateTimeStamp,
    ElectricConsumption = (SELECT SUM(Consumption)
    FROM tblMEP_Meters (nolock)
    JOIN tblMEP_MonthlyData (nolock)
    ON MeterID = tblMEP_Meters.ID
    WHERE SiteID = tblMEP_Sites.ID
    AND Type = 1
    AND BillingMonth = DATEADD(month, -6, getdate()))

    FROM tblMEP_Customers

1 个答案:

答案 0 :(得分:1)

如果您减少上面的代码

SELECT (SELECT SERV_ACCT, ACCOUNT, SERV_ADDRESS
FROM tblAPSData 
....
) AS AccountMeter

FROM tblMEP_Customers

,您可以看到您尝试选择3个字段SERV_ACCT, ACCOUNT, SERV_ADDRESSAccountMeter,这是不可能的。
在您的第二个示例中,只选择了一个值SUM(Consumption) 由于我无法在SELECT ( ...) AS AccountMeter查询中检测到对tblMEP_Customers的任何引用,因此无法为所需的输出提供解决方案。