#sql #sql-server
#sql #sql-server
Вопрос:
В настоящее время у нас есть 100 промежуточных таблиц, которые загружаются каждый день.
Я изо всех сил пытаюсь написать запрос, который дает мне результат сортировки — отображение количества записей, вставленных в промежуточные таблицы за день.
Name of tables Day 1 Day 2 Day 3 Day 4 Day 5
--------------------------------------------------------------
AAAAA 100 50 30 60 90
С уважением
Комментарии:
1. На сколько дней вы хотите вернуться назад и что определяет день 1?
2. Мы хотим просмотреть это за месяц — например, с 1 по 30 сентября
Ответ №1:
Вам нужно несколько разных шагов.
DATEDIFF(DAY, <timestamp>, getDate())
вы получите количество дней назад для записи.
Используя РЕГИСТР внутри СУММЫ, вы можете сделать что-то вроде…
SELECT
'AAAA' AS TableName,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 1 THEN 1 ELSE 0 END) AS Day1,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 2 THEN 1 ELSE 0 END) AS Day2,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 3 THEN 1 ELSE 0 END) AS Day3,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 4 THEN 1 ELSE 0 END) AS Day4,
etc, etc
FROM
AAAA
UNION ALL
SELECT
'BBBB' AS TableName,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 1 THEN 1 ELSE 0 END) AS Day1,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 2 THEN 1 ELSE 0 END) AS Day2,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 3 THEN 1 ELSE 0 END) AS Day3,
SUM(CASE WHEN DATEDIFF(DAY, <timestamp>, getDate()) = 4 THEN 1 ELSE 0 END) AS Day4,
etc, etc
FROM
BBBB
UNION ALL
etc, etc
Для этого требуется, чтобы код повторялся для каждой таблицы, которую вы запрашиваете. Но я думаю, что вы застряли, делая это так или иначе, несмотря ни на что.
Альтернативой было бы установить триггер для каждой таблицы и по мере вставки / удаления данных обновлять таблицу отслеживания новыми деталями. Это предполагает написание 100 триггеров вместо 100 объединений.
Без написания динамического SQL я не знаю никаких других принципиально отличных способов сделать это, чтобы избежать написания фрагмента кода 100 раз…