Я пытался думать о лучшем названии этого. У меня очень сложный запрос (с использованием традиционного ASP и SQL-сервера), и я собираюсь сделать его более простым, например, для целей.SQL Statement - Использование Count() & Sum() - и сортировка
Это для report.asp
SQL = "select EMPL.employeeName, " & _
"COUNT(BUSINESS.ID) AS theTotal, " & _
"COUNT(CASE WHEN BUSINESS.ID IS NULL THEN 1 END) as unTouched " & _
"FROM EMPL Inner Join BUSINESS " & _
"WHERE EMPL.STATUS = 1 " & _
"GROUP BY EMPL.employeeName " & _
"ORDER BY " & theOrder
вниз в HTML части У меня есть таблица, которая выглядит примерно так:
<table>
<tr>
<th><a href="report.asp?sort=1">Employee</th>
<th><a href="report.asp?sort=2">Total</th>
<th><a href="report.asp?sort=3">Untouched</th>
</tr>
<tr>
<td><%=RS("employeeName")%></td>
<td><%=RS("theTotal")%></td>
<td><%=RS("unTouched")%></td>
</tr>
</table>
Наконец, в верхней части страницы, у меня есть выбор case для порядка заказа, который выглядит следующим образом:
theOrder = request.querystring("sort")
SELECT CASE theOrder
CASE 1
theOrder = "EMPL.employeeName"
CASE 2
theOrder = "theTotal, EMPL.employeeName"
CASE 3
theOrder = "unTouched, EMPL.employeeName"
CASE ELSE
theOrder = "EMPL.employeeName"
END SELECT
Все работает нормально, как предполагалось. Теперь я хочу добавить столбец в конце, который будет отображаться (theTotal - unTouched).
Так что я добавить это вниз в коде цикла до строки таблицы:
do while not RS.eof
TheDIfference = RS("theTotal") - RS("unTouched")
...
добавить свой заголовок таблицы для «Difference» и новой строки, которая отображает вычитание и все выходит прекрасно.
В этом проблема. Я хочу иметь возможность сортировать по этой колонке так же, как и другие 2 столбца. Так что я попытался добавить строку в моей отборного заявления, что сказал:
SUM(theTotal - unTouched) AS theDifference
Это не сработало так, то я прописана все это:
SUM(COUNT(BUSINESS.ID)- COUNT(CASE WHEN BUSINESS.ID IS NULL THEN 1 END)) AS theDifference
то не работало либо.
Итак, есть ли правильный способ включить это в оператор select, чтобы я мог делать orderby или работу вокруг, где мне не нужно вставлять ее внутри самого утверждения?
Любая помощь приветствуется, спасибо!
EDIT: весь реальный запрос:
SQL = "SELECT E.[theTotal], E.[unTouched], (E.[theTotal] - E.[unTouched]) [theDifference] " & _
"FROM (" & _
"SELECT EMPL.EMPLDesc, EMPL.EMPLID, EMPL.EMPLSalesmanID, COUNT(BLXF.BLXFBSNSID) AS theTotal, " & _
"COUNT(CASE WHEN RIGHT(PROJ.ProjCode,1) = 'p' THEN 1 END) AS totalChamber, " & _
"COUNT(CASE WHEN RIGHT(PROJ.ProjCode,1) = 'c' THEN 1 END) AS totalCity, " & _
"COUNT(CASE WHEN LIST.LISTDESC LIKE '%-MUL%' THEN 1 END) AS MulCnt, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-MUL%') THEN 1 END) AS MulCntChamber, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-MUL%') THEN 1 END) AS MulCntCity, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-MUL%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) AS MulCntChamberUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-MUL%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) AS MulCntCityUN, " & _
"COUNT(CASE WHEN LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%' THEN 1 END) AS NonMulCnt, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%') THEN 1 END) AS NonMulCntChamber, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%') THEN 1 END) AS NonMulCntCity, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) AS NonMulCntChamberUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) AS NonMulCntCityUN, " & _
"COUNT(CASE WHEN BLXF.BLXFLastUpdate IS NULL THEN 1 END) as unTouched, " & _
"COUNT(CASE WHEN (BLXF.BLXFLastUpdate IS NULL AND RIGHT(PROJ.ProjCode,1) = 'p') THEN 1 END) as unTouchedChamber, " & _
"COUNT(CASE WHEN (BLXF.BLXFLastUpdate IS NULL AND RIGHT(PROJ.ProjCode,1) = 'c') THEN 1 END) as unTouchedCity, " & _
"COUNT(CASE WHEN (BLXF.BLXFLastUpdate IS NULL AND LIST.LISTDESC LIKE '%-MUL%') THEN 1 END) as unTouchedMul, " & _
"COUNT(CASE WHEN (BLXF.BLXFLastUpdate IS NULL AND LIST.LISTDESC NOT LIKE '%-MUL%') THEN 1 END) as unTouchedNonMul, " & _
"COUNT(CASE WHEN LIST.LISTDESC LIKE '%-RR-%' THEN 1 END) as reRunCnt, " & _
"COUNT(CASE WHEN (LIST.LISTDESC LIKE '%-RR-%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) as reRunCntUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-RR-%') THEN 1 END) AS reRunCntChamber, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-RR-%') THEN 1 END) AS reRunCntCity, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-RR-%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) AS reRunCntChamberUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-RR-%' AND BLXF.BLXFLastUpdate IS NULL) THEN 1 END) AS reRunCntCityUN " & _
"FROM BLXF INNER JOIN LIST ON BLXF.BLXFLISTID = LIST.LISTID " & _
"INNER JOIN BSST ON BLXF.BLXFBSSTID = BSST.BSSTID " & _
"INNER JOIN EMPL ON LIST.LISTEMPLID = EMPL.EMPLID " & _
"INNER JOIN PROJ ON LIST.LISTPROJID = PROJ.PROJID " & _
"WHERE (LIST.LISTAvailable = 1) AND (BSST.BSSTTerminalInd = 0) AND (PROJ.PROJPJSTID = 2) AND (EMPL.EMPLStatus = 'y') " & _
"GROUP BY EMPL.EMPLDesc, EMPL.EMPLID, EMPL.EMPLSalesmanID " & _
") E " & _
"ORDER BY " & theOrderBy
ОБНОВЛЕНО QUERY 2:
SQL = "SELECT E.[theTotal], E.[unTouched], (E.[theTotal] - E.[unTouched]) [theDifference] " & _
"FROM (" & _
"SELECT E.EMPLDesc, E.EMPLID, E.EMPLSalesmanID, COUNT(B.BLXFBSNSID) AS theTotal, " & _
"COUNT(CASE WHEN RIGHT(PROJ.ProjCode,1) = 'p' THEN 1 END) AS totalChamber, " & _
"COUNT(CASE WHEN RIGHT(PROJ.ProjCode,1) = 'c' THEN 1 END) AS totalCity, " & _
"COUNT(CASE WHEN LIST.LISTDESC LIKE '%-MUL%' THEN 1 END) AS MulCnt, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-MUL%') THEN 1 END) AS MulCntChamber, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-MUL%') THEN 1 END) AS MulCntCity, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-MUL%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) AS MulCntChamberUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-MUL%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) AS MulCntCityUN, " & _
"COUNT(CASE WHEN LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%' THEN 1 END) AS NonMulCnt, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%') THEN 1 END) AS NonMulCntChamber, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%') THEN 1 END) AS NonMulCntCity, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) AS NonMulCntChamberUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC NOT LIKE '%-MUL%' AND LIST.LISTDESC NOT LIKE '%-RR-%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) AS NonMulCntCityUN, " & _
"COUNT(CASE WHEN B.BLXFLastUpdate IS NULL THEN 1 END) as unTouched, " & _
"COUNT(CASE WHEN (B.BLXFLastUpdate IS NULL AND RIGHT(PROJ.ProjCode,1) = 'p') THEN 1 END) as unTouchedChamber, " & _
"COUNT(CASE WHEN (B.BLXFLastUpdate IS NULL AND RIGHT(PROJ.ProjCode,1) = 'c') THEN 1 END) as unTouchedCity, " & _
"COUNT(CASE WHEN (B.BLXFLastUpdate IS NULL AND LIST.LISTDESC LIKE '%-MUL%') THEN 1 END) as unTouchedMul, " & _
"COUNT(CASE WHEN (B.BLXFLastUpdate IS NULL AND LIST.LISTDESC NOT LIKE '%-MUL%') THEN 1 END) as unTouchedNonMul, " & _
"COUNT(CASE WHEN LIST.LISTDESC LIKE '%-RR-%' THEN 1 END) as reRunCnt, " & _
"COUNT(CASE WHEN (LIST.LISTDESC LIKE '%-RR-%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) as reRunCntUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-RR-%') THEN 1 END) AS reRunCntChamber, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-RR-%') THEN 1 END) AS reRunCntCity, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'p' AND LIST.LISTDESC LIKE '%-RR-%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) AS reRunCntChamberUN, " & _
"COUNT(CASE WHEN (RIGHT(PROJ.ProjCode,1) = 'c' AND LIST.LISTDESC LIKE '%-RR-%' AND B.BLXFLastUpdate IS NULL) THEN 1 END) AS reRunCntCityUN " & _
"FROM BLXF B INNER JOIN LIST ON B.BLXFLISTID = LIST.LISTID " & _
"INNER JOIN BSST ON B.BLXFBSSTID = BSST.BSSTID " & _
"INNER JOIN EMPL E ON LIST.LISTEMPLID = E.EMPLID " & _
"INNER JOIN PROJ ON LIST.LISTPROJID = PROJ.PROJID " & _
"WHERE (LIST.LISTAvailable = 1) AND (BSST.BSSTTerminalInd = 0) AND (PROJ.PROJPJSTID = 2) AND (E.EMPLStatus = 'y') " & _
"GROUP BY E.EMPLDesc, E.EMPLID, E.EMPLSalesmanID " & _
") E " & _
"ORDER BY " & theOrderBy
Вы считаете, что вы сортируете свою клиентскую сторону на столе, есть множество плагинов jQuery, которые могут это сделать, вот пример: http://tablesorter.com/docs/ – John
Не пробовал, но все же пытался сохранить его на стороне сервера но если я не могу заставить его работать, я могу посмотреть на клиентскую сторону сортировки – Loopy