Я пытаюсь создать представление для мониторов производительности Windows.Проблема, с которой я столкнулся, состоит в том, что в таблице, которую я назвал «AllPerf», есть два столбца с именами «PerfCounter» и «Приложение», в которых есть несколько разных имен счетчиков производительности и приложений.
В идеале, я хочу, чтобы мои столбцы: время, компьютер, имя приложения, а затем имена всех строк PerfCounter в столбцах.
Я создал представление только имен строкЯ хочу, и с текущим представлением, которое я создал ниже, я получаю этот вывод:
-----------------------------------------------------------------------
| mem.AlertTime | Computer | PerfCounter | Application | Value |
-----------------------------------------------------------------------
| 2019-03-15 14:49:02 | WEB-04 | Vrt_Bytes | System |0.1368 |
| 2019-03-15 14:49:02 | WEB-05 | Vrt_Bytes | System |2440 |
| 2019-03-15 14:49:02 | WEB-06 | Handles | w3wp |1508 |
| 2019-03-15 14:49:02 | WEB-04 | Page_Faults | System |0.00419 |
| 2019-03-15 14:49:02 | WEB-04 | Prvt_Bytes | System |0.1368 |
-----------------------------------------------------------------------
Я пробовал решения по этой ссылке ниже, но когда я могу успешно перечислить имена строк в виде столбцов, я получаюЗначения не заполняются под столбцами. Эффективное преобразование строк в столбцы на сервере SQL
И поскольку у меня нет большого опыта работы с SQL в целом, я не могу экстраполировать простые примеры с моими более сложными данными
Это то, что я использую для своего оператора SELECT для моего текущего представления.
SELECT mem.AlertTime,
Computer,
CASE WHEN mem.PerfCounter = 'Virtual Bytes' THEN 'Virt_Bytes'
WHEN mem.PerfCounter = 'Private Bytes' THEN 'Prvt_Bytes'
WHEN mem.PerfCounter = 'Page Faults/sec' THEN 'Page_Faults_Sec'
WHEN mem.PerfCounter = 'Thread Count' THEN 'Threads'
WHEN mem.PerfCounter LIKE '%Handle%' THEN 'Handles'
END AS PerfCounter,
PerfInstance AS Application,
Value
FROM dbo.AllPerf AS mem
И то, что я хочу, выглядит примерно так:
--------------------------------------------------------------------------------------------
| mem.AlertTime | Computer |Application| Vrt_Bytes| Prvt_Bytes| Handles| Page_Faults |
-------------------------------------------------------------------------------------------
| 2019-03-15 14:49:02 | WEB-04 | System | 12440 | 24.13 | 13 | 0.14 |
| 2019-03-15 14:49:02 | WEB-04 | w3wp | 7396 | 4.2309 | 13 | 0 |
| 2019-03-15 14:49:02 | WEB-05 | w3wp | 1538 | 0.1368 | 1538 | 0 |
| 2019-03-15 14:49:02 | WEB-05 | System | 6629 | 6500 | 1835 | 5 |
| 2019-03-15 14:49:02 | WEB-06 | System | 2440 | 0.1368 | 13 | 0 |
--------------------------------------------------------------------------------------------
И еслиУ меня было желание «пирог в небе», я бы преобразовал MBytes в Mem_Bytes в ГБ, но я не смог успешно сделать операторы CASE и включить в результат математику