我觉得这应该是一个简单的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”。
任何帮助?
答案 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(),即使在尝试读取单个值时也是如此。