选择 查询以在 DISTINCT else 默认值时返回值



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

本质上,在此示例中,我想返回一个不同的Order_IDs列表以及国家/地区:

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

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

-

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

目前,这将返回错误"列'销售数据.国家'在选择列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。

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

有什么帮助吗?

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

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(),即使在尝试读取单个值时也是如此。