我的表看起来像:如何在一列中总计行组的结果?
Customer Error1 Error2 Error3 Error4 TotalErrors TotalOrders
CustomerName [SUM(Error1)] [SUM(Error2)] [SUM(Error3)] [SUM(Error3) [SUM(TotalErrors)] [TotalOrders]
Total
的中间行客户名称是行集团的一部分下令CustomerWithErrors简单地告知用户,如果给定的客户名称有任何的4个错误的。如果没有,它不会显示在表格中。
在最后一行中,我只需右键单击并为行组中的每列添加总计。这完全按照我的意愿输出每列的总和,除了最后一列。当我添加总数时,它给了我所有客户名称的TotalErrors字段的总和,而不仅仅是那些有错误的字段(表中实际显示的字段)。因此,这个数字非常庞大。我怎样才能得到总错误列中显示的数字总和?
编辑:下面是设计和预览模式一些截图:
设计:http://i.imgur.com/6kEmzw3.png
前瞻:http://i.imgur.com/NOpWmAI.png
编辑2:SQL的顶级表矩阵:
一些这对我来说是新的,所以它可能看起来不太好。让我知道我能解释什么。谢谢。
SELECT
PKEY
,Customer
,isnull(CustomerName, 'Unknown') AS CustomerName
,CustomerWithErrors
,Warehouse
,ErrorMessage
,PROCESSDATE
,CARTONERRORMESSAGE
,Division
,BOLNO
,BOLSHIPDATE
,CARTONDETAILERRMSG
,ErrorCategory
,CASE WHEN ErrorCategory='Success'
THEN 0
ELSE
COUNT(NotLate)
END AS OnTimeCount
,COUNT(Invalid) AS InvalidCount
,COUNT(WrongData) AS WrongDataCount
,COUNT(Duplicate) AS DuplicateCount
,COUNT(MissingData) AS MissingDataCount
,(COUNT(Invalid)+COUNT(WrongData)+COUNT(Duplicate)+COUNT(MissingData)) AS TotalErrors
,Total945s AS TotalReport945s
--,COUNT(*) OVER(PARTITION BY [CustomerWithErrors]) Total945s
, (SELECT (Total945s) WHERE CustomerWithErrors>=0) AS TotalErrors
FROM(
SELECT
PKEY
,Customer
,CASE WHEN CustomerName = '' OR CustomerName IS NULL
THEN 'Unknown'
ELSE CustomerName
END AS CustomerName
,CASE WHEN CustomerName='' OR CustomerName IS NULL OR CustomerName='Unknown'
THEN 0
ELSE
(SELECT DISTINCT Customer WHERE ErrorCategory <> 'Success') END
AS CustomerWithErrors
,Warehouse
,ErrorMessage
,PROCESSDATE
,CARTONERRORMESSAGE
,Division
,BOLNO
,BOLSHIPDATE
,CARTONDETAILERRMSG
,ErrorCategory
,CASE WHEN ErrorCategory='Success'
THEN 'N'
ELSE OnTime
END AS OnTime
,(SELECT Customer WHERE OnTime = 'Y') AS NotLate
,(SELECT Customer WHERE ErrorCategory = 'Invalid') AS Invalid
,(SELECT Customer WHERE ErrorCategory = 'Wrong Data') AS WrongData
,(SELECT Customer WHERE ErrorCategory = 'Duplicate') AS Duplicate
,(SELECT Customer WHERE ErrorCategory = 'Missing Data') AS MissingData
, COUNT(*) OVER(PARTITION BY [Customer]) Total945s
FROM EDI945UTIErrors
) S
GROUP BY
PKEY
,Customer
,CustomerName
,CustomerWithErrors
,Warehouse
,ErrorMessage
,PROCESSDATE
,CARTONERRORMESSAGE
,Division
,BOLNO
,BOLSHIPDATE
,CARTONDETAILERRMSG
,ErrorCategory
,OnTime
,Total945s
编辑3: 这是否看起来像我应该在报告中聚集做什么:与PIVOT SQL?谢谢。
SELECT
S.PKEY
,Customer
,isnull(S.CustomerName, 'Unknown') AS CustomerName
,CustomerWithErrors
,Warehouse
,ErrorMessage
,PROCESSDATE
,CARTONERRORMESSAGE
,Division
,BOLNO
,BOLSHIPDATE
,CARTONDETAILERRMSG
,ErrorCategory
,CASE WHEN ErrorCategory='Success'
THEN 0
ELSE
COUNT(NotLate)
END AS OnTimeCount
,Invalid
,WrongData
,Duplicate
,MissingData
--,COUNT(Invalid) AS InvalidCount
--,COUNT(WrongData) AS WrongDataCount
--,COUNT(Duplicate) AS DuplicateCount
--,COUNT(MissingData) AS MissingDataCount
--,(COUNT(Invalid)+COUNT(WrongData)+COUNT(Duplicate)+COUNT(MissingData)) AS TotalErrors
,Total945s AS TotalReport945s
--,COUNT(*) OVER(PARTITION BY [CustomerWithErrors]) Total945s
--, (SELECT (Total945s) WHERE CustomerWithErrors>=0) AS TotalErrors
FROM(
SELECT
PKEY
,Customer
,CASE WHEN CustomerName = '' OR CustomerName IS NULL
THEN 'Unknown'
ELSE CustomerName
END AS CustomerName
,CASE WHEN CustomerName='' OR CustomerName IS NULL OR CustomerName='Unknown'
THEN 0
ELSE
(SELECT DISTINCT Customer WHERE ErrorCategory <> 'Success') END
AS CustomerWithErrors
,Warehouse
,ErrorMessage
,PROCESSDATE
,CARTONERRORMESSAGE
,Division
,BOLNO
,BOLSHIPDATE
,CARTONDETAILERRMSG
,ErrorCategory
,CASE WHEN ErrorCategory='Success'
THEN 'N'
ELSE OnTime
END AS OnTime
,(SELECT Customer WHERE OnTime = 'Y') AS NotLate
--,(SELECT Customer WHERE ErrorCategory = 'Invalid') AS Invalid
--,(SELECT Customer WHERE ErrorCategory = 'Wrong Data') AS WrongData
--,(SELECT Customer WHERE ErrorCategory = 'Duplicate') AS Duplicate
--,(SELECT Customer WHERE ErrorCategory = 'Missing Data') AS MissingData
, COUNT(*) OVER(PARTITION BY [Customer]) Total945s
FROM EDI945UTIErrors
--WHERE Customer ='104646' and OnTime = 'Y'
--WHERE CUSTOMER='107834'
--AND ErrorCategory = 'Wrong Data'
--AND ERRORMESSAGE LIKE '%Overshipment Not Allowed%'
) S
LEFT JOIN
(
SELECT PKEY, ISNULL(CustomerName, 'Unknown') AS CustomerName, [Invalid], [WrongData], [Duplicate], [MissingData], [Success]
FROM EDI945UTIErrors
PIVOT (Count(Customer) FOR ErrorCategory in ([Invalid], [WrongData], [Duplicate], [MissingData], [Success]))
AS P) AS PT ON S.PKEY = PT.PKEY
GROUP BY
S.PKEY
,Customer
,S.CustomerName
,CustomerWithErrors
,Warehouse
,ErrorMessage
,PROCESSDATE
,CARTONERRORMESSAGE
,Division
,BOLNO
,BOLSHIPDATE
,CARTONDETAILERRMSG
,ErrorCategory
,OnTime
,Total945s
,Invalid
,WrongData
,MissingData
,Duplicate
非常感谢您的宝贵时间。
很难描绘你所描述的内容。你可以张贴截图吗? – 2014-11-06 20:00:35
你的桌子上是否有过滤器来吸引有错误的顾客,还是仅仅将它们分组?你能给我们[sum(totalerrors))的完整表达吗?它可能指的是你的整个数据集。 – april4181 2014-11-06 20:06:39
@TabAlleman如果你仍然可以帮忙,我添加了两个截图。你可以看到我试图解决的第二个问题。 – 2014-11-10 14:09:25