2017-07-24 59 views
1

我的数据库记录样本如下自定义选择与SQL

Database Records

我得到的结果如下

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 

SQL Results

我想如下得到的结果,我表示如果分组的Category和SubCatgory行记录多于1个分类行必须为“Category”,但分组Category和SubCategory equal 1“SubCate血淋淋的”行必须为空白或空

enter image description here

+0

你能否修复你的查询来匹配你的源表和期望的结果? –

+0

@ PM77-1好的,谢谢。我修好了它。 – Kerberos

+0

看不到任何更改。你有没有提交你的编辑? –

回答

2
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更新问题后的答案更改。

跑我上面贴的代码会生成以下结果集:

enter image description here

我已经更新了COUNT()case语句来检查不同的子类别。这不是最漂亮的解决方案,但它的工作原理

除了Orderrank的不同之处(这是因为您运行的代码与您发布的代码不同,因为它们是硬编码值),代码会生成预期结果组。如果订购是问题,那就改变订购。

EDIT2:我刚刚更新我的代码,以根据您的问题生成正确的顺序。

+0

对不起,我的问题因为我而错了。你的代码不适合我,因为这个原因。我编辑了我的问题。再次抱歉。 – Kerberos

+0

@kerebos更新 –

+0

非常感谢。它像魅力一样工作。 – Kerberos

0

因为您想要结果,基于@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

+0

对不起,我的问题是因为我错了。你的代码不适合我,因为这个原因。我编辑了我的问题。再次抱歉。 – Kerberos

+0

没问题@Kerberos谢谢 –