Я пытаюсь получить номер элемента на основе логического поля. Логическое поле - это динамическое поле, переданное как параметр (как показано в этом post) во время выполнения.Использование имени столбца в качестве параметра и использование входного параметра в предложении WHERE/HAVING
EDIT: Наконец-то решил. Просто изменили линии WHEN на: WHEN 'SI_A' THEN COUNT(CASE WHEN SI_A=1 THEN 1 END)
. Спасибо @FDavidov!
SELECT
OrganismName
, MONTH(DateDiscovered) AS 'Month'
, CASE @Column
WHEN 'SI_A' THEN COUNT(CASE WHEN SI_A=1 THEN 1 END)
WHEN 'SI_B' THEN COUNT(CASE WHEN SI_B=1 THEN 1 END)
WHEN 'SI_C' THEN COUNT(CASE WHEN SI_C=1 THEN 1 END)
WHEN 'SI_D' THEN COUNT(CASE WHEN SI_D=1 THEN 1 END)
END AS 'Cases'
FROM tblFindings
INNER JOIN
tblOrganism
ON
tblFindings.OrganismID = tblOrganism.OrganismID
WHERE
(SELECT
CASE @Column
WHEN 'SI_A' THEN COUNT(CASE WHEN SI_A=1 THEN 1 END)
WHEN 'SI_B' THEN COUNT(CASE WHEN SI_B=1 THEN 1 END)
WHEN 'SI_C' THEN COUNT(CASE WHEN SI_C=1 THEN 1 END)
WHEN 'SI_D' THEN COUNT(CASE WHEN SI_D=1 THEN 1 END)
END AS 'Cases'
FROM tblFindings
INNER JOIN
tblOrganism
ON
tblFindings.OrganismID = tblOrganism.OrganismID
) > 0
GROUP BY
OrganismName
, MONTH(DateDiscovered)
ORDER BY
OrganismName
, MONTH(DateDiscovered)
EDIT: Забыл включить полный стол. Я пытался использовать UNPIVOT, но я получаю сообщение об ошибке: «OrganismID был указан несколько раз в u». Это один не передать имя столбца в качестве параметра однако:
SELECT
OrganismName
, MONTH(DateDiscovered) AS 'Month'
, u.Cases
, u.Sites
FROM tblFindings
INNER JOIN tblOrganism ON tblFindings.OrganismID = tblOrganism.OrganismID
UNPIVOT (
Cases FOR Sites in (SI_A, SI_B, SI_C, SI_D)
) u
WHERE u.Cases > 0
Используя этот code, я также получаю строки, имеющие в общей сложности 0. Это результат, который я м пытается достичь:
=========================
|OrganismName|Month|SI_A|
=========================
|nota |2 |2 |
|something |10 |1 |
|woo |2 |1 |
=========================
=========================
|OrganismName|Month|SI_B|
=========================
|something |4 |1 |
|something |10 |1 |
=========================
=========================
|OrganismName|Month|SI_C|
=========================
|something |10 |2 |
=========================
=========================
|OrganismName|Month|SI_D|
=========================
|something |10 |1 |
=========================
Вместо этого, я получаю это (если я кормлю "SI_A" в качестве параметра):
==========================
|OrganismName|Month|Cases|
==========================
|nota |2 |2 |
|something |4 |0 |
|something |10 |1 |
|woo |2 |1 |
|woo |7 |0 |
==========================
Я использовал предложение WHERE, но получил результат выше. Затем я попробовал предложение HAVING, но получил те же результаты. Я не слишком хорошо разбираюсь в SQL, кроме простых запросов, но как бы добиться этого?
'select ... from (<весь ваш текущий оператор select с группой by>), где case> 0' - поместить это resuls (с 0s) в подзапрос или CTE и применить дополнительные фильтры на следующем уровне. –