当DISTINCT为默认值

时间:2017-11-03 13:50:33

标签: sql sql-server

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

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

  • 如果有一个国家/地区与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]

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

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

任何帮助?

1 个答案:

答案 0 :(得分:3)

您需要汇总您不分组的内容。我相信这对你有用:

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