自定义选择与SQL
我的数据库记录样本如下自定义选择与SQL
我得到的结果如下
SELECT
Category,
SubCategory,
COUNT(Category) AS [CategoryCount],
CASE
WHEN Category = 'Vegetables' THEN 3.1
WHEN Category = 'Animals' THEN 4.1
WHEN Category = 'Cars' THEN 3.1
WHEN Category = 'Fruits' THEN 2.7
ELSE 0 END AS [OrderRank]
FROM
Table1
GROUP BY
Category
ORDER BY
OrderRank DESC,
Category
我想如下得到的结果,我表示如果分组的Category和SubCatgory行记录多于1个分类行必须为“Category”,但分组Category和SubCategory equal 1“SubCate血淋淋的”行必须为空白或空
SELECT
Category,
CASE
WHEN COUNT(DISTINCT SubCategory) > 1 THEN ''
ELSE MAX(SubCategory)
END,
COUNT(Category) AS [CategoryCount],
CASE
WHEN Category = 'Vegetables' THEN 5.3
WHEN Category = 'Animals' THEN 4.1
WHEN Category = 'Cars' THEN 3.1
WHEN Category = 'Fruits' THEN 2.7
ELSE 0 END AS [OrderRank]
FROM
Table1
GROUP BY
Category
ORDER BY
OrderRank DESC,
Category
给这个一杆。
使用case语句来检查您的计数,您可以提供subCategory或空白。
编辑:在Kerebos更新问题后的答案更改。
跑我上面贴的代码会生成以下结果集:
我已经更新了COUNT()case语句来检查不同的子类别。这不是最漂亮的解决方案,但它的工作原理
除了Orderrank的不同之处(这是因为您运行的代码与您发布的代码不同,因为它们是硬编码值),代码会生成预期结果组。如果订购是问题,那就改变订购。
EDIT2:我刚刚更新我的代码,以根据您的问题生成正确的顺序。
因为您想要结果,基于@jamesLuxton答案,您只需更改此行。
COUNT(Category) AS [CategoryCount],
这一个
SUM(Categorycount) AS [CategoryCount],
最终SQL将是一个
SELECT
Category,
CASE
WHEN COUNT(Category) > 1 THEN ''
ELSE MAX(SubCategory)
END,
sum(Categorycount) AS [CategoryCount],
CASE
WHEN Category = 'Vegetables' THEN 3.1
WHEN Category = 'Animals' THEN 4.1
WHEN Category = 'Cars' THEN 3.1
WHEN Category = 'Fruits' THEN 2.7
ELSE 0 END AS [OrderRank] FROM
Table1 GROUP BY
Category
ORDER BY
OrderRank DESC,
Category
希望这有助于。
很好回答@james
对不起,我的问题是因为我错了。你的代码不适合我,因为这个原因。我编辑了我的问题。再次抱歉。 – Kerberos
没问题@Kerberos谢谢 –
你能否修复你的查询来匹配你的源表和期望的结果? –
@ PM77-1好的,谢谢。我修好了它。 – Kerberos
看不到任何更改。你有没有提交你的编辑? –