Как подсчитать количество идентификаторов, которые могут охватывать несколько столбцов в SQL? - PullRequest
0 голосов
/ 18 декабря 2011

Допустим, у меня есть следующие (2) таблицы:

[Таблица людей]

ID Имя
1 Джон
2 Сьюзи
3 Дейв

[Таблица запросов]

ID 1stChoicePersonRequested 2ndChoicePersonRequested 3rdChoicePersonRequested
1 1 2 3
2 2 NULL NULL
3 1 2 NULL
4 3 1 1

Результаты, которые я ищу в запросе, следующие:

NameID Name NumTimeRequested
1 John4
2 Сьюзи 3
3 Дейв 2

Мне нужны результаты для подсчета общего количества запросов каждого человека независимо от того, какой из (3) столбцы, в которые они включены. Каков наилучший способ сделать это в SQL 2008?Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 декабря 2011
SELECT P.ID NameID, Name, C NumTimeRequested
FROM
    (
        SELECT ID, COUNT(*) C
        FROM (
            SELECT [1stChoicePersonRequested] ID FROM [Request Table]
            UNION ALL
            SELECT [2ndChoicePersonRequested] ID FROM [Request Table]
            UNION ALL
            SELECT [3rdChoicePersonRequested] ID FROM [Request Table]
        ) R1
        GROUP BY ID
    ) R2
    JOIN [People Table] P ON R2.ID = P.ID

Или вы можете сделать это:

SELECT
    ID NameID,
    Name,
    (SELECT COUNT(*) FROM [Request Table] WHERE [1stChoicePersonRequested] = P.ID)
    + (SELECT COUNT(*) FROM [Request Table] WHERE [2ndChoicePersonRequested] = P.ID)
    + (SELECT COUNT(*) FROM [Request Table] WHERE [3rdChoicePersonRequested] = P.ID)    
    NumTimeRequested
FROM
    [People Table] P
1 голос
/ 18 декабря 2011
;with R as
(
  select PersonID
  from [Request Table]
    cross apply (values ([1stChoicePersonRequested]),
                        ([2ndChoicePersonRequested]),
                        ([3rdChoicePersonRequested])) as T(PersonID)
)
select R.PersonID as NameID, 
       P.Name, 
       count(*) as NumTimeRequested 
from R
  inner join [People Table] as P
    on R.PersonID = P.ID
group by R.PersonID, P.Name
order by R.PersonID

http://data.stackexchange.com/stackoverflow/q/122030/

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