【问题标题】:SELECT query to return value when DISTINCT else default valueSELECT 查询以在 DISTINCT 时返回值,否则为默认值
【发布时间】:2026-01-28 05:10:02
【问题描述】:

我觉得这应该是一个简单的 SELECT 查询,但不能让它工作。

本质上,在这个例子中,我想返回一个不同的 Order_ID 列表以及国家:

  • 如果有一个国家与 Order_ID 关联,则返回该国家值

  • 如果关联多个国家/地区,则返回默认值('Multiple')。

-

SELECT [Order_ID]
    ,CASE WHEN COUNT(DISTINCT [Country]) = 1 THEN [Country] ELSE 'Multiple' END as [Combined_Country]
    FROM [Sales Data]
    GROUP BY [Order_ID]

此时返回错误“列 'Sales Data.Country' 在选择列表中无效,因为它既不包含在聚合函数或 GROUP BY 子句中。”

但是,将 Country 添加到 GROUP BY 子句会导致为与订单关联的每个国家/地区返回多行,而不是默认值为“Multiple”的一行。

有什么帮助吗?

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您需要汇总未分组的内容。我相信这应该适合你:

    SELECT 
        [Order_ID]
        , CASE WHEN COUNT(Country) > 1 THEN 'Multiple' ELSE MAX(Country) END AS [Combined_Country]
    FROM [Sales Data]
    GROUP BY 
        [Order_ID]  
    

    在这里,当我们看国家时,我们总是在聚合。 COUNT() 聚合是你真正关心的,但我们需要使用另一个聚合函数,在我的例子中是 MAX(),即使在尝试读取单个值时也是如此。

    【讨论】: