Добавление дополнительного столбца к выводу запроса SQL SELECT в зависимости от текущей таблицы и каждой отдельной строки - PullRequest
0 голосов
/ 07 ноября 2019

Допустим, у меня есть следующая таблица с уже вставленными этими строками:

|  a  |   b   |      c      |
|---  |----   |-------      |
| 1A  |  1B   | (null)      |
| 2A  |  2B   |     1A      |
| 3A  |  3B   |     1A      |

Я бы хотел

  • SELECT все из таблицы в запросе и
  • также подсчитывает для каждой строки, как часто a соответствующей строки появляется в c во всей таблице.

Вот как должен выглядеть ожидаемый результат:

|  a  |   b   |      c      | count     |
|---  |----   |-------      |------     |
| 1A  |  1B   | (null)      |     2     |
| 2A  |  2B   |     1A      |     0     |
| 3A  |  3B   |     1A      |     0     |

Для первого ряда «1А» также появляется в c второго и третьего ряда. Тем не менее, «2A» или «3A» больше нигде не отображается в c.

Я пробовал следующее ( SQL Fiddle ):

create table test (a varchar(30), b varchar(30), c varchar(30));

insert into test (a, b) values ("1A", "1B");
insert into test (a, b, c) values ("2A", "2B", "1A");
insert into test (a, b, c) values ("3A", "3B", "1A");

select *, (select count(*) from test where test.c = a) as count from test;

Однако count всегда 0.

Как мне добиться того, что я описал выше в одном запросе? Буду признателен за любую помощь! :)

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Вы можете использовать подзапрос:

select t.*,
       (select count(*) from test t2 where t2.c = t.a)
from test t;

Это так же, как ваша версия, но она использует правильные псевдонимы таблиц. Всегда квалифицируйте все ссылки на столбцы.

0 голосов
/ 07 ноября 2019

SELECT 0 AS Id, 'All' AS Name UNION ALL SELECT Столбец (-ы) от tableName;

Вы можете добавить это в SQL Server.

...