2017-07-24 92 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謝謝 –