2017-03-07 68 views
-1

执行该存储过程时收到错误消息,该消息是:SQL SP - 只有一个表达式可以在选择列表中指定当子查询不与引入EXISTS

消息116,级别16,状态1,过程stpr_SP1,第42行 当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。 消息116,级别16,状态1,过程stpr_SP1,55线 只有一个表达式可以在选择列表中指定时不与引入的子查询存在。

任何人都可以在这方面帮助,因为我卡住了!以下是代码,谢谢。

SELECT CASE @GroupType WHEN 'Store' THEN 
     (select top 100 percent dbo.Table1.Field1 
     ,dbo.Table1.Location 
     ,count(dbo.Table1.URN) AS [OrderCount] 
     ,convert(numeric(18,2),avg(dbo.Table1.Value)) AS [ValueAvg] 
FROM dbo.Table1 
GROUP BY dbo.Table1.Field1 
     ,dbo.Table1.Location 
ORDER BY dbo.Table1.Field1 ASC 
     ,dbo.Table1.Location ASC) 

WHEN 'Customer' THEN 
     (select top 100 percent dbo.Table1.Field1 
     ,dbo.Table1.InvoiceCode 
     ,dbo.Table1.Location 
     ,count(dbo.Table1.URN) AS [OrderCount] 
     ,convert(numeric(18,2),avg(dbo.Table1.Value)) AS [ValueAvg] 
FROM dbo.Table1 
GROUP BY dbo.Table1.Field1 
     ,dbo.Table1.InvoiceCode 
     ,dbo.Table1.Location 
ORDER BY dbo.Table1.Field1 ASC 
     ,dbo.Table1.InvoiceCode ASC 
     ,dbo.Table1.Location ASC) 
END 
+1

一个标量子查询只能返回一列。你的代码不会工作。也许你只是想'如果'而不是'select case'。 –

+0

@GordonLinoff和1行 –

+0

你正在使用哪个dbms? (该代码是产品特定的。) – jarlh

回答

0

想必你想IF而不是SELECT CASE

IF @GroupType = 'Store' 
BEGIN 
    select top 100 percent dbo.Table1.Field1, . . . 
END; 
IF @GroupType = 'Customer' 
BEGIN 
    select top 100 percent dbo.Table1.Field1, . . . 
END; 
0

在SQL CASE表达,这意味着它返回一个值(单个的)。你想要的是一个IF

IF @GroupType = 'Store' 
BEGIN 
    SELECT t.Field1, 
      t.Location, 
      COUNT(t.URN) AS [OrderCount], 
      CONVERT(numeric(18,2),AVG(t.Value)) AS [ValueAvg] 
    FROM dbo.Table1 t 
    GROUP BY t.Field1, 
      t.Location 
    ORDER BY t.Field1 ASC, 
      t.Location ASC 
END 
IF @GroupType = 'Customer' 
BEGIN 
    SELECT t.Field1, 
      t.InvoiceCode, 
      t.Location, 
      COUNT(t.URN) AS [OrderCount], 
      CONVERT(numeric(18,2),AVG(t.Value)) AS [ValueAvg] 
    FROM dbo.Table1 t 
    GROUP BY t.Field1, 
      t.InvoiceCode, 
      t.Location 
    ORDER BY t.Field1 ASC, 
      t.InvoiceCode, 
      t.Location ASC 
END 
+0

谢谢大家,中频工作! – Mark

相关问题