【发布时间】:2016-08-12 16:29:50
【问题描述】:
请帮我解决这个问题
消息 116,级别 16,状态 1,过程 openclosebycat,第 18 行
子查询时,选择列表中只能指定一个表达式 没有与 EXISTS 一起引入。消息 116,级别 16,状态 1,过程 openclosebycat,第 20 行
当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。
我的代码:
select distinct
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS LIKE 'closed')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS closen,
(SELECT NUMBER, STATUS, ID
FROM dbo.PROBS
WHERE (STATUS LIKE 'closed')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS closedet,
(SELECT NUMBER, STATUS, ID
FROM dbo.PROBS
WHERE (STATUS LIKE 'open')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS opendet,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'closed')
AND (CATEGORY = 'problem')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS closeporb,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'closed')
AND (CATEGORY = 'request for information')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS closereinfo,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'closed')
AND (CATEGORY = 'incident')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS closeincid,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'closed')
AND (CATEGORY = 'complaint')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS closecomp,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'open')
AND (CATEGORY = 'problem')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS openporb,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'open')
AND (CATEGORY = 'request for information')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS openreinfo,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'open')
AND (CATEGORY = 'incident')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS openincid,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS = 'open')
AND (CATEGORY = 'complaint')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS opencomp,
(SELECT COUNT(*)
FROM dbo.PROBS
WHERE (STATUS LIKE 'open')
AND (OPEN_TIME >= @DateFrom)
AND (CLOSE_TIME <= @DateTo)) AS openn
FROM
dbo.PROBS
【问题讨论】:
-
看起来您的程序
openclosebycat没有完全粘贴到问题中,并且问题与EXISTS关键字相关,该关键字也丢失了。 -
您肯定需要将所有这些代码替换为相关的 CASE 语句。没有理由在 select 语句中执行所有这些子查询。这里的特殊问题是您的每个子选择只能返回一个结果,有些返回 3(NUMBER、STATUS、ID)。
标签: sql asp.net sql-server sql-server-2008 stored-procedures