Я создал несколько тестовых данных, таких как:
id_pk | name | id_fk | name
-------+------+-------+--------
1 | foo | 1 | jingle
1 | foo | 1 | jangle
2 | bar | 2 | jangle
3 | quux | |
И написал запрос:
select m.id_pk, case when groupcount.name_count > 1 then substring(m.name, 1, 1) + '_' + n.name else m.name end
from test_table1 m
left join test_table2 n on m.id_pk = n.id_fk
left join (select name, count(name) as name_count from test_table2 group by name) groupcount on n.name = groupcount.name
, который производит это:
id_pk | name
-------+----------
1 | foo
1 | f_jangle
2 | b_jangle
3 | quux
Я думаю, что вы могли иметь в виду m.name вместо n.name в вашей ветке "else"?
Я догадываюсь (и именно поэтому пример вывода был бы полезен) из вашего "@count должен принимать значение по одному столбцу за раз", которое вам нужно вывести @count из счетчика строк для каждого имени в test_table2.
Я полагаю, что вывод этого запроса - это то, что вы хотите поместить в свою временную таблицу: в этом случае добавьте префикс "insert into #temp_cols".