2014-01-13 33 views
0

我有我的查詢:計數和點心

SELECT CASE WHEN dt.value = 380 AND p.FlowStatusID <> 5 THEN 'FATTURE C&S' 
      WHEN dt.value = 381 AND p.FlowStatusID <> 5 THEN 'NOTE CREDITO C&S' 
      WHEN dt.value = 380 OR dt.value = 381 AND p.FlowStatusID = 5 THEN 'LATE ARCHIVE C&S' 
      END AS [Tipo Documento] 
      ,SUM(p.SystemField5) AS 'Nr Pagine', Count(p.SystemField3) AS 'Nr Documenti' 

FROM dbo.PSDOC p INNER JOIN dbo.listDocumentTypes dt ON p.DocumentTypeId = dt.value 

GROUP BY dt.value, p.FlowStatusID 

我想通過文檔類型

document type  | sum   | count 
-------------------------------------------------- 
FATTURE C&S   |    | 
NOTE CREDITO C&S |    | 
LATE ARCHIVE C&S |    | 

之和計數組,但查詢結果

document type  sum   count 
---------------------------------------------- 
LATE ARCHIVE C&S | 8  | 5 
FATTURE C&S   | 2412 | 1265 
FATTURE C&S   | 104254 | 67990 
NOTE CREDITO C&S | 362 | 236 
FATTURE C&S   | 167 | 98 
LATE ARCHIVE C&S | 4  | 2 
LATE ARCHIVE C&S | 297107 | 163797 

我怎樣才能得到它像在文檔類型列不同?

+0

請停止寫入** **一切**中的粗體**!大膽應該用於**重點** - 不只是爲了一切! –

+0

好的,謝謝,我會 – user3190075

+0

請記住'OR's被評估_after_'AND's - 您的最後一個條件評估爲'dt.value = 380或(dt.value = 381 AND p.FlowStatusId = 5)',而不是' (dt.value = 380或dt.value = 381)AND p.FlowStatusId = 5'就像我懷疑你的意思。每當混合OR或其他操作符,**總是**指定括號以使您的含義清晰(對您和未來的維護者)。 –

回答

2

只需刪除從group bydt.valueFlowStatusId,並與全case語句來替換它:

SELECT CASE WHEN dt.value = 380 AND p.FlowStatusID <> 5 THEN 'FATTURE C&S' 
      WHEN dt.value = 381 AND p.FlowStatusID <> 5 THEN 'NOTE CREDITO C&S' 
      WHEN dt.value = 380 OR dt.value = 381 AND p.FlowStatusID = 5 THEN 'LATE ARCHIVE C&S' 
      END AS [Tipo Documento], 
     SUM(p.SystemField5) AS "Nr Pagine", Count(p.SystemField3) AS "Nr Documenti" 
FROM dbo.PSDOC p INNER JOIN 
    dbo.listDocumentTypes dt 
    ON p.DocumentTypeId = dt.value 
GROUP BY CASE WHEN dt.value = 380 AND p.FlowStatusID <> 5 THEN 'FATTURE C&S' 
       WHEN dt.value = 381 AND p.FlowStatusID <> 5 THEN 'NOTE CREDITO C&S' 
       WHEN dt.value = 380 OR dt.value = 381 AND p.FlowStatusID = 5 THEN 'LATE ARCHIVE C&S' 
     END