【问题标题】:SQL Server Subquery returned more than 1 valueSQL Server 子查询返回超过 1 个值
【发布时间】:2013-04-05 01:18:24
【问题描述】:

我正在尝试分类是SQL Server 2012(查看SQL Fiddledemo)

但是,当我引入子查询时,它会检索到以下消息:“子查询返回的值超过 1 个。当子查询遵循 =、!=、、>= 时,这是不允许的或者当子查询用作表达式时"

我应该改用什么脚本?

编辑:我希望有以下输出,基于 SQL Fiddle 演示:

CATEGORY    REGION    PRECIO    CATEGORY
Pepe         Paris      21        Other
Pizza        Paris      21        Pizza
Pizza        Paris      22        Pizza
Salad        Paris      22        Other
Beverage    Vidreres    20       Beverage   
Beverage    Vidreres    24       Beverage   
Pizza       Vidreres    19        Pizza
Pizza       Vidreres    20        Pizza 

提前致谢。

【问题讨论】:

  • 根据您的示例记录,您想要的输出是什么?
  • 我现在要添加它
  • 刚刚检查过您的查询似乎不正确。你期待什么输出?
  • 您是否故意使用 GROUP BY?由于您按表中的每一列进行分组,因此很难理解它的作用。
  • 我只是使用 group by 因为 SQL Fiddle 要求我这样做(也许它发生在我试图弄清楚脚本的某个时候)

标签: sql sql-server subquery case


【解决方案1】:

添加计数(请停止更改要求)。为避免重复代码,您可以在 CTE 中执行 CASE 表达式(也可以使用派生表)。

;WITH x AS 
(
  SELECT Category, Region, Precio, 
    Products = CASE WHEN Category IN ('Pizza','Beverage')
      THEN Category ELSE 'Other' END
  FROM dbo.supportContacts
)
SELECT Category, Region, Precio, Products,
  ProductCount = COUNT(*) OVER (PARTITION BY Products)
FROM x;

SQL fiddle demo

【讨论】:

  • 您的 ProductCount 值是否正确..?
  • @Pandian 我不知道 OP 的要求是什么;你知道吗?我假设他想要每个类别的计数(使用 CASE 表达式的派生列),而不是单个产品。
  • @Pandian 可能,但我对猜测并不感兴趣。
【解决方案2】:

试试这个。

SELECT *, case
            when Category = 'Pizza' then 'Pizza'
            when Category = 'Beverage' then 'Beverage'
            else 'Other' end as Products

 FROM supportContacts
Group by Region, Category, Precio

【讨论】:

    【解决方案3】:

    你不需要子查询

    SELECT *, case
          when Category = 'Pizza' then 'Pizza'
              when Category = 'Beverage' then 'Beverage'
           else 'Other' end as Products
     FROM supportContacts
    Group by Region, Category, Precio
    

    输出:

    | CATEGORY |   REGION | PRECIO | PRODUCTS |
    -------------------------------------------
    |     Pepe |    Paris |     21 |    Other |
    |    Pizza |    Paris |     21 |    Pizza |
    |    Pizza |    Paris |     22 |    Pizza |
    |    Salad |    Paris |     22 |    Other |
    | Beverage | Vidreres |     20 | Beverage |
    | Beverage | Vidreres |     24 | Beverage |
    |    Pizza | Vidreres |     19 |    Pizza |
    |    Pizza | Vidreres |     20 |    Pizza |
    

    SQLFiddle

    【讨论】:

    • 另外,我应该介绍什么来统计产品的数量。我的意思是,我想介绍另一个包含 count(Products) 的列,但它不允许我这样做。
    【解决方案4】:

    我认为您编写该查询以获得以下结果...

    如果我找到你,请尝试以下查询..

    Select Category, Region, Precio,Products,count(Products) _Count from
    (Select Category, Region, Precio,
    case
            when Category = 'Pizza' then 'Pizza'
            when Category = 'Beverage' then 'Beverage'
            else 'Other' 
    end as Products 
    FROM supportContacts) res
    Group by Category,Region,Precio,Products
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 2022-01-17
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多