Моя таблица выглядит примерно так:Как суммировать результаты группы строк в столбце?
Customer Error1 Error2 Error3 Error4 TotalErrors TotalOrders
CustomerName [SUM(Error1)] [SUM(Error2)] [SUM(Error3)] [SUM(Error3) [SUM(TotalErrors)] [TotalOrders]
Total
Средний ряд CustomerName является частью группы Row заказанные на CustomerWithErrors, который просто говорит, если имя клиента имеет любой из 4-х ошибок. Если нет, он не отображается в таблице.
В последней общей строке я просто щелкаю правой кнопкой мыши и добавляю итог для каждого столбца в группе строк. Это выводит сумму каждого столбца точно так, как я хочу, за исключением последнего столбца. Когда я добавляю итог, он дает мне сумму полей TotalErrors для всех имен клиентов, а не только те из них, которые имеют ошибки (фактически показаны в таблице). Следовательно, число массивное. Как я могу просто получить сумму чисел, отображаемых в столбце «Общая ошибка»?
EDIT: Вот несколько скриншотов дизайна и режимах просмотра:
Дизайн: http://i.imgur.com/6kEmzw3.png
Preview: http://i.imgur.com/NOpWmAI.png
EDIT 2: SQL ДЛЯ ВЕРХНЕЙ Tablix:
Некоторые из этих был для меня новым, поэтому, вероятно, он выглядит не очень хорошо. Позвольте мне знать, что я могу объяснить. Благодарю.
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
EDIT 3: 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
Большое спасибо за ваше время.
Трудно представить, что вы описываете. Можете ли вы опубликовать скриншот? –
У вас есть фильтр на вашем столе, чтобы вытаскивать клиентов только с ошибками или просто группировать их таким образом? Можете ли вы дать нам полное выражение для [sum (totalerrors])? Это может быть ссылка на весь ваш набор данных. – april4181
@TabAlleman Я добавил два скриншота, если вы все еще можете помочь. Вы можете увидеть огромное количество, которое я пытаюсь исправить во втором. –