У меня есть код ниже, и я пытаюсь найти 10 лучших серверов, используемых в прошлом месяце, но имеющих проблемы, не очень хороших с SQL. Нужна помощь или совет, если это возможно.SQL ТОП 10 Оценка запроса Требуется помощь
Я получил эту работу в 10 лучших приложениях, но не могу понять, как это произошло для 10 лучших серверов.
SELECT TOP 10 dbo_LU_SERVERNAME.SERVERNAME, Count(*) AS SessionNumbers
FROM dbo_LU_SERVERNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_SERVERNAME.PK_SERVERNAMEID = dbo_SDB_SESSION.FK_SERVERNAMEID
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-30,Now())))
GROUP BY dbo_LU_SERVERNAME.SERVERNAME
ORDER BY Count(*) DESC;
UNION ALL SELECT "Other" AS SERVERNAME, Count(*) AS SessionNumbers
FROM (dbo_LU_SERVERNAME
INNER JOIN dbo_SDB_SESSION
ON dbo_LU_SERVER.PK_SERVERID = dbo_SDB_SESSION.FK_SERVERID)
LEFT JOIN (SELECT TOP 10 dbo_LU_SERVERNAME.SERVERNAME, Count(*) AS SessionNos
FROM dbo_LU_SERVERNAME
INNER JOIN dbo_SDB_SESSION
ON dbo_LU_SERVER.PK_SERVERID = dbo_SDB_SESSION.FK_SERVERID
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-31,Now())))
GROUP BY dbo_LU_SERVERNAME.SERVERNAME
ORDER BY Count(*) DESC) AS s ON dbo_LU_SERVERNAME.SERVERNAME = s.SERVERNAME
WHERE s.SERVERNAME Is Null
GROUP BY "Other";
Это SQL, который работает для 10 лучших APPS.
SELECT TOP 10 dbo_LU_APPNAME.APPNAME, Count(*) AS SessionNos
FROM dbo_LU_APPNAME INNER JOIN dbo_SDB_SESSION ON dbo_LU_APPNAME.PK_APPNAMEID = dbo_SDB_SESSION.FK_APPNAMEID
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-30,Now())))
GROUP BY dbo_LU_APPNAME.APPNAME
ORDER BY Count(*) DESC;
UNION ALL SELECT "Other" AS APPNAME, Count(*) AS SessionNos
FROM (dbo_LU_APPNAME
INNER JOIN dbo_SDB_SESSION
ON dbo_LU_APPNAME.PK_APPNAMEID = dbo_SDB_SESSION.FK_APPNAMEID)
LEFT JOIN (SELECT TOP 10 dbo_LU_APPNAME.APPNAME, Count(*) AS SessionNos
FROM dbo_LU_APPNAME
INNER JOIN dbo_SDB_SESSION
ON dbo_LU_APPNAME.PK_APPNAMEID = dbo_SDB_SESSION.FK_APPNAMEID
WHERE (((dbo_SDB_SESSION.SESSIONSTART) Between Now() And DateAdd("d",-31,Now())))
GROUP BY dbo_LU_APPNAME.APPNAME
ORDER BY Count(*) DESC) AS s ON dbo_LU_APPNAME.APPNAME = s.APPNAME
WHERE s.APPNAME Is Null
GROUP BY "Other";
Пожалуйста, обратите внимание, что таблицы связаны как: dbo_LU_SERVER ---> FK_SERVERNAMEID, PK_SERVERID dbo_LU_SERVERNAME ---> PK_SERVERNAMEID dbo.SDB.SESSION ---> FK_SERVERID
Я не уверен, что я делаю неправильно.
Пожалуйста, помогите.
Спасибо
То, что вы не объясните в вашем вопросе является использование UNION ALL. Я разбираюсь в том, что это общее количество всех сеансов сервера, не включенных в список из 10 лучших. Поэтому ваш окончательный список будет состоять из 11 строк, 10 лучших серверов, а затем подсчет всех остальных сеансов. – Tony
Вы отметили свой вопрос с помощью SQL и ms-access и visual-basic. Я предполагаю, что вы пишете этот запрос для Access, но где входит часть VB? – Tony
Это из http://stackoverflow.com/questions/2205902/need-help-with-sql-query-in-access/2206029#2206029 не так ли? – Fionnuala