Я действительно изо всех сил пытаюсь создать простую сетку, которую я могу предоставить нетехническим членам команды, чтобы они могли легко искать количество людей в нашей базе данных клиентов SQL на основе любых двух демографических характеристик.
Например, у нас часто возникают вопросы типа «сколько людей в базе данных - мужчины в возрасте 36–45 лет» или «сколько людей в возрасте 18–25 лет в нашей базе данных можно отправить по электронной почте». С помощью сетки поиска они смогут ответить на них сами.
Фактические данные имеют много переменных, поэтому реальная сетка, вероятно, будет большой, но в упрощенном примере таблицы исходных данных имеется 1 строка на клиента (~ 3 м строк) со следующими столбцами:
party_id -- Customer ID #
, gender -- 'Male'/'Female'/'Unknown gender'
, age -- '18-25'/'26-35'/'36-45'/'46-55'/'56-65'/'66-80'/'Unknown age'
, emailability -- 'Emailable'/'Not Emailable'
Таблица результатов будет иметь одинаковые строки и столбцы с количеством клиентов в каждой ячейке (т. Е. Количество людей, которые удовлетворяют критериям строки и столбца). В этом примере строки и столбцы будут иметь вид:
Male
Female
Unknown gender
18-25
26-35
36-45
46-55
56-65
66-80
Unknown age
Emailable
Not emailable
Чтобы узнать количество людей, удовлетворяющих любым двум критериям, вам просто нужно найти пересечение в сетке (в первом вопросе выше это пересечение строки: «Мужчина» и столбца: «18- 25 "или строка:" 18-25 "и столбец:" Мужской ").
Не похоже, что это должно быть трудной проблемой, но я в полном замешательстве. Я думал, что это будет решено Pivots, но я не мог найти способ кросс-таблицы более 2 переменных. Скорее всего, SQL также не подходит для этой работы, но сейчас у меня не так много других инструментов, поэтому, если возможно, я бы хотел найти решение SQL, но сообщите мне, если вы знаете лучшие варианты.
Я был удивлен, что не нашел здесь существующего решения, но, возможно, я не использовал правильные условия поиска, поэтому извиняюсь, если на этот вопрос уже был дан ответ.
Спасибо!
- EDIT--
В соответствии с запросом вот несколько примеров данных:
party_id |gender |age |Emailability |
---------|-------|--------|--------------|
1 |Male |18-25 |Not Emailable |
2 |Female |Unknown |Emailable |
3 |Unknown|36-45 |Emailable |
4 |Male |36-45 |Not Emailable |
5 |Male |56-65 |Emailable |
6 |Female |26-35 |Emailable |
7 |Male |18-25 |Emailable |
8 |Unknown|18-25 |Not Emailable |
9 |Male |66-80 |Emailable |
10 |Female |26-35 |Emailable |
На основании данных этого примера первые несколько строк заполненной сетки будут выглядеть следующим образом (мне пришлось отбросить столбцы электронной почты из-за ширины страницы, но они также были бы включены):
Male Female Unknown Gender 18-25 26-35 36-45 46-55 56-65 66-80
Male 5 0 0 2 0 1 0 1 1
Female 0 3 0 0 2 0 0 0 0
Unknown gender 0 0 2 1 0 1 0 0 0
18-25
26-35
36-45
46-55
56-65
66-80
Unknown age
Emailable
Not emailable
Чтобы пояснить, поскольку я думаю, что это вызвало некоторую путаницу, я не пытаюсь создать представление для других пользователей базы данных - я надеюсь создать вывод, который я могу экспортировать в Excel, чтобы люди, не являющиеся техническими специалистами, могли использовать его как раздаточный материал / шпаргалка. Возможно, эта сетка не может быть настроена так, как планировалось, с использованием только SQL, но из-за размера набора данных и ограниченного количества инструментов я надеюсь, что это можно сделать в SQL. Еще раз спасибо за любые предложения.