2016-12-15 6 views
1

Было задано несколько вариантов этого вопроса, но я не смог найти поворот к тому, что я пытаюсь сделать. Это моя исходная таблица (SQLServer):Подсчитайте количество различных комбинаций в нескольких столбцах в SQL

State City   Job 
CA  LOS ANGELES DEVELOPER 
CA  SAN FRANCISCO DESIGNER 
CA  LOS ANGELES DESIGNER 
NY  NEW YORK  DEVELOPER 

Я хотел бы рассчитывать различные сочетания государства и города и вернуть его в качестве нового столбца в таблице. Таким образом, конечный продукт выглядит следующим образом:

State City   Job   # of Unique 
CA  LOS ANGELES DEVELOPER 3 
CA  SAN FRANCISCO DESIGNER 3 
CA  LOS ANGELES DESIGNER 3 
NY  NEW YORK  DEVELOPER 3 

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

+0

Ваш вывод не соответствует вход. вы ожидаете 2 для CA - Лос-Анджелес и 1 для двух других? –

ответ

3

Попробуйте этот запрос;

Test Data

CREATE TABLE #TestData (State nvarchar(2), City nvarchar(20), Job nvarchar(20)) 
INSERT INTO #TestData 
VALUES 
('CA','LOS ANGELES','DEVELOPER') 
,('CA','SAN FRANCISCO','DESIGNER') 
,('CA','LOS ANGELES','DESIGNER') 
,('NY','NEW YORK','DEVELOPER') 

Запрос

SELECT 
    a.State 
    ,a.City 
    ,a.Job 
    ,b.CountField 
FROM #TestData a 
CROSS JOIN (SELECT 
      COUNT(DISTINCT State + City) CountField 
      FROM #TestData 
      ) b 

Output (неупорядоченный потому что заказ по заявлению)

State City   Job   CountField 
CA  LOS ANGELES  DEVELOPER 3 
CA  LOS ANGELES  DESIGNER 3 
CA  SAN FRANCISCO DESIGNER 3 
NY  NEW YORK  DEVELOPER 3 

По вашему вопросу в комментариях, вы можете сделать это фильтровать только CA в счетчике;

SELECT 
    a.State 
    ,a.City 
    ,a.Job 
    ,b.CountField 
FROM #TestData a 
CROSS JOIN (SELECT 
      COUNT(DISTINCT State + City) CountField 
      FROM #TestData 
      WHERE State = 'CA' 
      ) b 

Который должен вывести

State City   Job   CountField 
CA  LOS ANGELES  DEVELOPER 2 
CA  LOS ANGELES  DESIGNER 2 
CA  SAN FRANCISCO DESIGNER 2 
NY  NEW YORK  DEVELOPER 2 
+0

Спасибо, Rich, но под CountField я надеюсь показать, что общее количество уникальных комбинаций штата и города повторяется в каждом ряду. Таким образом, мой пример, уникальные комбинации: CA - LA/CA-SANFRAN/NY - NY, так что столбец count возвратит 3 в каждой строке. Имеет ли это смысл? – rafacardosoc

+0

@rafacardosoc aah, gotcha. Попробуйте это –

+0

спасибо Rich, я отметил ваш ответ как правильный, но имел последний caviat, чтобы спросить. Будет ли этот запрос позволять мне фильтровать состояние или город, и счет будет обновляться? Итак, пример, если я делаю где state = CA, вместо таблицы, выводящей 3 строки, он будет показывать 2, поскольку исключает NY. – rafacardosoc

Смежные вопросы