Создание запроса кросс-таблицы - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь создать своего рода перекрестный запрос, чтобы подытожить, как существуют данные нашей демографической расы. Таблица была структурирована таким образом, чтобы иметь 5 столбцов расы (race1, race2, race3, race4, race5). Цель состоит в том, чтобы показать, сколько людей входят в разные группы, например, кто-то, кто имеет значение в любом из этих полей АС, к каким другим (если они есть) группам они также принадлежат.

Вот как в основном структурирована таблица

Person_ID   Race1   Race2   Race3   Race4   Race5
815543      WH      BA      IN      UN      UN
815861      WH      HP      AS      UN      UN
823438      WH      BA      IN      UN      UN
825103      WH      BA      AS      UN      UN
825202      BA      WH      IN      UN      UN
825744      IN      WH      BA      UN      UN

Это пример ожидаемого конечного результата

        AS      BA      HP      IN      UN      WH
AS      1223    354     165     61      32216   1950
BA      823     112     264     731     119639  6135
HP      96      61      107     63      25510   285
IN      150     555     36      1000    63014   1510
UN      160     499     95      72      179927  3893
WH      2617    6012    477     1647    667126  125000

Полагаю, мне следует сначала отключить данные, чтобы у меня была запись по каждой гонке, но потом я не уверен, что мне следует попробовать дальше.

1 Ответ

0 голосов
/ 25 июня 2019

Если я вас правильно понимаю, тогда это довольно простой расчет, если у вас фиксированное количество гонок.

Этот запрос вернет то, что вы ищете:

declare @RACES TABLE (RACE varchar(16))
insert into @RACES (RACE) values ('AS'), ('BA'), ('HP'), ('IN'), ('UN'), ('WH')

select RACE,
       (select count(*) 
        from MYTABLE
        where RACE in (Race1, Race2, Race3, Race4, Race5) and 
              'AS' in (Race1, Race2, Race3, Race4, Race5)) as 'AS',
       (select count(*) 
        from MYTABLE
        where RACE in (Race1, Race2, Race3, Race4, Race5) and 
              'BA' in (Race1, Race2, Race3, Race4, Race5)) as 'BA',
       (select count(*) 
        from MYTABLE
        where RACE in (Race1, Race2, Race3, Race4, Race5) and 
              'HP' in (Race1, Race2, Race3, Race4, Race5)) as 'HP',
       (select count(*) 
        from MYTABLE
        where RACE in (Race1, Race2, Race3, Race4, Race5) and 
              'IN' in (Race1, Race2, Race3, Race4, Race5)) as 'IN',
       (select count(*) 
        from MYTABLE
        where RACE in (Race1, Race2, Race3, Race4, Race5) and 
              'UN' in (Race1, Race2, Race3, Race4, Race5)) as 'UN',
       (select count(*) 
        from MYTABLE
        where RACE in (Race1, Race2, Race3, Race4, Race5) and 
              'WH' in (Race1, Race2, Race3, Race4, Race5)) as 'WH'
from @RACES

Хотя, если у вас переменное количество гонок, вам нужно будет динамически построить этот оператор SQL и запустить его с помощью sp_executesql

https://www.mssqltips.com/sqlservertip/1160/execute-dynamic-sql-commands-in-sql-server/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...