#sql #group-by
Вопрос:
Я не могу заставить Группу вести себя должным образом, но я не уверен, чего мне не хватает.
Я полагаю, что Итемпат-это моя проблема. Когда я использую Group By, это группировка по пути, который может отличаться по длине и содержанию, даже если имя отчета в конце пути одно и то же. Мне нужно, чтобы они были сгруппированы по имени отчета, а не по фактическому пути. Я не уверен, чего мне не хватает, чтобы это произошло. Вы можете увидеть результаты моего кода ниже. Они должны быть сгруппированы по названию, но это не так, потому что ItemPath может отличаться, поэтому совпадают только некоторые из них.
Я попытался создать производную таблицу и сгруппировать по столбцу ReportName, но это дало тот же результат, так как мне пришлось включить ItemPath в предложение group by из-за того, что он не был агрегирован в инструкции SELECT.
SELECT Count(ItemPath) AS ExecutionCount,
RIGHT(ItemPath, CHARINDEX('/', REVERSE([ItemPath]), 0) - 1) AS ReportName,
SUM([TimeDataRetrieval]) AS TimeDataRetrievalSum,
SUM([TimeProcessing]) AS TimeProcessingSum,
SUM([ByteCount]) AS ByteCountSum,
SUM([RowCount]) AS RowCountSum
FROM [ReportServer].[dbo].[ExecutionLog3]
WHERE ItemPath LIKE '%/example/%' AND
ItemPath NOT LIKE '%placeholder%' AND
ItemPath NOT LIKE '%example2%'
GROUP BY ItemPath
ORDER BY ExecutionCount DESC
Образец текущих результатов («Счет» должен быть сгруппирован, но это не так):
| ExecutionCount | ReportName |TimeDataRetrievalSum|
| -------------- | ---------- |--------------------|
| 1246 | Invoice |82303 |
| 41 | Invoice |6303 |
| 8 |Remittance |153 |
Спасибо!
Комментарии:
1. просто сгруппируйте по : СПРАВА(ItemPath, CHARINDEX(‘/’, ОБРАТНЫЙ([ItemPath]), 0) — 1)
2. У вас есть два отчета с
Invoice
именами в разных путях3. @Adamszsz Вау, я знал, что это будет что-то простое, о чем я не думал. Спасибо! Это сработало.
4. Приятно это слышать 🙂 , пожалуйста, проголосуйте за одежду по вопросу, если это вам поможет.
Ответ №1:
Тебе нужно что-то вроде этого :
SELECT Count(ItemPath) AS ExecutionCount,
RIGHT(ItemPath, CHARINDEX('/', REVERSE([ItemPath]), 0) - 1) AS ReportName,
SUM([TimeDataRetrieval]) AS TimeDataRetrievalSum,
SUM([TimeProcessing]) AS TimeProcessingSum,
SUM([ByteCount]) AS ByteCountSum,
SUM([RowCount]) AS RowCountSum
FROM [ReportServer].[dbo].[ExecutionLog3]
WHERE ItemPath LIKE '%/example/%' AND
ItemPath NOT LIKE '%placeholder%' AND
ItemPath NOT LIKE '%example2%'
GROUP BY RIGHT(ItemPath, CHARINDEX('/', REVERSE([ItemPath])
ORDER BY ExecutionCount DESC