【问题标题】:SQL SP - Only one expression can be specified in the select list when the subquery is not introduced with EXISTSSQL SP - 当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式
【发布时间】:2017-07-27 16:36:25
【问题描述】:

执行此存储过程时收到错误消息,消息是:

消息 116,级别 16,状态 1,过程 stpr_SP1,第 42 行 当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。 消息 116,级别 16,状态 1,过程 stpr_SP1,第 55 行 当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。

任何人都可以帮助解决这个问题,因为我被卡住了!下面是代码,谢谢。

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

【问题讨论】:

  • 标量子查询只能返回一列。您的代码将无法正常工作。也许你只想要if 而不是select case
  • @GordonLinoff 和 1 行
  • 您使用的是哪个 dbms? (该代码是特定于产品的。)

标签: sql stored-procedures


【解决方案1】:

大概你想要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;

【讨论】:

    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 2020-01-24
      • 1970-01-01
      • 2012-12-04
      • 2011-09-24
      • 2018-04-14
      相关资源
      最近更新 更多