Я исследовал это совсем немного и не нашел ответа, который я ищу. Я смог добраться до этого момента с небольшой помощью, но теперь застрял на еще одном препятствии.
Я хотел бы иметь возможность отображать все УНИКАЛЬНЫЕ названия компаний в крайнем левом столбце, а затем «подсчет» количества тестов каждого типа, проведенных в течение определенного месяца. Я закомментировал часть своего кода, который, хотя и работает, не учитывает, когда номер конкретного теста равен нулю (нет записей в БД, соответствующих условиям), что необходимо, по крайней мере, для убедитесь, что другие тесты не перепутали свои «счета». Мой код, вероятно, поможет уточнить:
<cfset s = structNew()>
<cfquery datasource="test" name="qry">
SELECT company, test_type, count(test_type) as counter
FROM donor_log
GROUP BY company, test_type
</cfquery>
<cfloop query="qry">
<cfset s[qry.company][qry.test_type] = qry.counter>
</cfloop>
<table border="1">
<tr>
<th>Company</th>
<th>UA</th>
<th>BA</th>
<th>Hair</th>
<th>Blood</th>
</tr>
<cfoutput>
<cfloop collection="#s#" item="i">
<tr>
<td>#i#</td>
<cfloop collection="#s[i]#" item="j">
<cfquery dbtype="query" name="ua">
SELECT DISTINCT company
FROM qry
WHERE company='#i#'
AND test_type='UA'
</cfquery>
<cfdump var="#ua#">
<!---
<cfif val(s[i][j]) EQ 0>
<td>0</td>
<cfelse>
<td>#s[i][j]#</td>
</cfif>
--->
</cfloop>
</tr>
</cfloop>
</cfoutput>
Раздел с комментариями не выводит на экран «0», когда значение structKey
равно 0, и в настоящее время, если у компании, скажем, 0 UA, но 2 BA, ячейка под UA показывает 2, а BA ничего не имеет. Значит, и с моим <cfif>
утверждением что-то не так, но я не уверен, что именно. Пожалуйста, поймите, я только начинаю изучать ColdFusion, и большая часть того, что у меня есть на этой конкретной странице, взята из сообщения другой доброй души на другом форуме. Жду ваших ответов и отзывов, заранее спасибо!
Быстрое редактирование PS: когда я использую <cfdump>
, как указано выше, на выходе получается 1 полный запрос для компании с 1 такой записью company="#i#" AND test_type="UA"
, 2 запроса для компании с 2 такими записями, 3 запроса для 3 совпадающих записей и так далее. В конечном итоге хотелось бы, чтобы этот запрос выполнялся только ОДИН РАЗ для каждой компании "#i#"
, а затем вытягивал s[i][j].recordcount
(где бы он не был равен 0), чтобы затем я мог сравнить его с другой таблицей (графиком сборов) и сгенерировать общую сумму для выставления счета каждому. компания на основе количества проведенных тестов, если это имеет смысл, но сначала мне нужно пересечь этот мост.
pivot
вместо создания этого в CF. ЕСЛИ ваша база данных поддерживает это. 1) Какой тип и версию БД вы используете? 2) Сколько существует типов тестов? Существует ли фиксированное количество типов? (Кстати, обязательно всегда указывайте тип и версию базы данных с вопросами запроса). - person Leigh   schedule 05.02.2013