2014-07-04 53 views
1

無法獲得正確的輸出這是在ASP.net SQL數據庫查詢:SQL查詢過濾器,因爲我在尋找

SELECT OpenWorkWeek, COUNT(Validation) AS Invalid, COUNT(Validation) AS Valid 
FROM Email 
GROUP BY OpenWorkWeek, Validation 
ORDER BY OpenWorkWeek 

輸出:

WorkWeek Invalid Valid 
-----------------------  
WW 01  4  4 
WW 01  52  52 
WW 02  21  21 
WW 02  231 231 

,我想結果顯示應該是這樣的:

WorkWeek Invalid Valid 
------------------------  
WW 01  4  52 
WW 02  21  231 

請幫忙查詢!

謝謝! :)

+1

plz格式化輸出正常,否則創建一個示例sqlfiddle!並且在您的查詢中,有效和無效列都具有相同的「驗證」列!你不認爲它一定是不同的?哪個會返回相同的輸出! –

+0

請用簡單的英文說明**如何從當前輸出獲得想要的輸出 - 你想做什麼,你想要保留哪些行,哪些是你想要丟棄的 - 什麼是**這個決定的標準**? –

+0

有沒有這樣的事情作爲** SQL數據庫** - SQL只是結構化查詢語言 - 許多數據庫系統使用的語言,但它不是數據庫產品。很多東西都是供應商特定的 - 所以我們真的需要知道**您正在使用的數據庫系統**(以及哪個版本)....(請相應地更新標籤) –

回答

1

你必須發表的價值ValidationColumn,這樣我們才能得到Count的值Validation

例如,考慮Validation的值有像

Validation 
---------- 
Valid 
InValid 
InValid 
Valid 
Valid 

所以查詢將

SELECT OpenWorkWeek, SUM(Case When Validation = 'Valid' Then 1 Else 0 End) AS Valid, 
     SUM(Case When Validation = 'InValid' Then 1 Else 0 End) AS InValid 
FROM Email 
GROUP BY OpenWorkWeek 
ORDER BY OpenWorkWeek 

輸出將爲

WorkWeek Invalid Valid 
------------------------  
WW 01  4  52 
WW 02  21  231 

可以更換case語句根據validation

編輯

要得到有效的劃分而產生的,無效嘗試這樣的。

SELECT OpenWorkWeek,Valid,Invalid, (Cast(Valid As Decimal)/ Cast(InValid As Decimal)) As Percentage 
From 
    (
    SELECT OpenWorkWeek, SUM(Case When Validation = 'Valid' Then 1 Else 0 End) AS Valid, 
      SUM(Case When Validation = 'InValid' Then 1 Else 0 End) AS InValid 
    FROM Email 
    GROUP BY OpenWorkWeek 
    ORDER BY OpenWorkWeek 
    )Tmp 
+1

非常感謝!這是正確的答案。 :) – MistF

+0

如果我想劃分2總和值怎麼辦?像無效/有效。我該怎麼做? – MistF

+0

@ user3513685我可以幫你。請清除 –

1

如果你想每個工作周的結果記錄,你應該按工作周分組,而不是工作周加驗證。要獲得有效和無效的計數,只需在每場比賽中加1即可。在您的意見中說,驗證是「有效」或「無效」,因此:

SELECT OpenWorkWeek, 
    SUM(CASE WHEN Validation = 'invalid' THEN 1 END) AS Invalid 
    SUM(CASE WHEN Validation = 'valid' THEN 1 END) AS Valid 
FROM Email 
GROUP BY OpenWorkWeek 
ORDER BY OpenWorkWeek;