1

Вопрос по jasper-reports, sql, java – Как запросить несколько сумм одного и того же элемента с помощью SQL в iReport

  • I'm creating a JasperReport using iReport, and as such, I'm limited* to one SQL query.

  • I have a table 'statistics', with a 'name' (VARCHAR), 'count'(INTEGER), and 'datetime'(DATETIME) columns.

  • It is simple enough to get the sum of the 'count' column when the 'name' was "test" for the last day, and similarly for the last week, and month (see bellow)

Рабочий оператор SQL:


SELECT
  SUM(count)as 'today'
FROM
  statistics
WHERE
   name = "test"
  AND $P{oneDayAgo} <= datetime
  AND datetime <= $P{now}
  • However, since I only have one SQL statement to work with, I need to somehow combine them. I tried using UNION (as bellow) but this didn't work.

Неудачный оператор SQL:

SELECT
     SUM(count)as 'today'
FROM
     statistics
WHERE
     name = "test"
 AND $P{oneDayAgo} <= datetime
 AND datetime <= $P{now}
UNION
SELECT
     SUM(count)as 'thisWeek'
FROM
     statistics
WHERE
     name = "test"
 AND $P{oneWeekAgo} <= datetime
 AND datetime <= $P{now}
UNION
SELECT
     SUM(count)as 'thisMonth'
FROM
     statistics
WHERE
     name = "test"
 AND $P{oneMonthAgo} <= datetime
 AND datetime <= $P{now}

(*) можно добавлять дополнительные запросы только для графиков или кросс-таблиц, ни один из которых не служит моей цели.

  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от barryred
  • Error: User Rate Limit Exceeded

    от barryred
  • Error: User Rate Limit Exceeded

    от barryred
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от barryred
  • Error: User Rate Limit Exceeded

    от
  • Если вы опубликуете определение таблицы и пример желаемого результата, я уверен, что кто-то может вам помочь ...

    от Eric Schneider
  • 0

    Запросы UNION должны содержать одинаковые столбцы (имя

    тип). Установите неиспользуемые столбцы в NULL или используйте столбец дифференцирования:

    SELECT
         SUM(count) as `total`,
         'today' as `when`
    FROM
         statistics
    WHERE
         name = "test"
     AND $P{oneDayAgo} <= datetime
     AND datetime <= $P{now}
    UNION
    SELECT
         SUM(count) as `total`,
         'thisWeek' as `when`
    FROM
         statistics
    WHERE
         name = "test"
     AND $P{oneWeekAgo} <= datetime
     AND datetime <= $P{now}
    UNION
    SELECT
         SUM(count) as `total`,
         'thisMonth' as `when`
    FROM
         statistics
    WHERE
         name = "test"
     AND $P{oneMonthAgo} <= datetime
     AND datetime <= $P{now}
    

  • 4

    сумма (случай, когда -условие- затем считать еще 0 конец)

    SELECT
      SUM(case when $P{oneDayAgo} <= datetime then count else 0 end) as 'today',
      SUM(case when $P{oneWeekAgo} <= datetime then count else 0 end) as 'thisweek',
      SUM(count) as 'thismonth'
    FROM
      statistics
    WHERE
       name = "test"
      AND $P{oneMonthAgo} <= datetime
      AND datetime <= $P{now}
    

    обратите внимание, что если вам нужны средние значения, обязательно замените NULL на 0.

  • 0

    У вас есть 2 варианта:

    1) Удалите «как» часть каждого запроса, а затем он будет представлен в виде 1 столбца, который не будет иметь имени

    2) Создайте временную таблицу и вставьте эти строки во временную таблицу, а затем запросите временную таблицу