Как написать условие в SQL, используя значение COUNT - PullRequest
0 голосов
/ 18 мая 2009

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

IF(@COUNT>1)
BEGIN
insert into #temp_cols  
SELECT M.ID_PK,  
substring(M.NAME,1,1)+'_'+ N.NAME 
FROM TEST_TABLE1 M WITH (NOLOCK) 
LEFT JOIN TEST_TABLE2 N  ON M.ID_PK=N.ID_FK  
END

ELSE
BEGIN
insert into #temp_cols  
SELECT M.ID_PK,  
N.NAME 
FROM TEST_TABLE1 M WITH (NOLOCK) 
LEFT JOIN TEST_TABLE2 N  ON M.ID_PK=N.ID_FK 
END

где @count должно быть равно числу (имени) из группы test_table2 по имени, которое возвращает группу столбцов, а @count должно принимать одно значение столбца за раз

Ответы [ 3 ]

1 голос
/ 18 мая 2009

Вот еще один способ. Если идея заключается в том, чтобы отображать имя по-разному в зависимости от наличия дубликатов в TestTable2, то это будет работать:

DECLARE @Count int
SELECT @Count = COUNT(name) FROM test_table2 GROUP BY name HAVING COUNT(name) > 1

INSERT INTO #temp_cols  
SELECT 
   M.ID_PK,  
   CASE 
      WHEN @Count > 1 THEN SUBSTRING(M.NAME, 1, 1) + '_' + N.NAME
      ELSE N.Name
   END,    
FROM TEST_TABLE1 M WITH (NOLOCK) 
  LEFT JOIN TEST_TABLE2 N  ON M.ID_PK = N.ID_FK 

РЕДАКТИРОВАТЬ: Если, с другой стороны, намерение состоит в том, чтобы изменить отображение имени только при наличии совпадающих идентификаторов в TestTable2, это будет работать, и это очень просто:

INSERT INTO #temp_cols  
SELECT 
   M.ID_PK,  
   ISNULL(SUBSTRING(M.NAME, 1, 1) + '_' + N.NAME, M.Name) As Name   
FROM TEST_TABLE1 M WITH (NOLOCK) 
  LEFT JOIN TEST_TABLE2 N  ON M.ID_PK = N.ID_FK
1 голос
/ 18 мая 2009

Я создал несколько тестовых данных, таких как:

 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".

0 голосов
/ 18 мая 2009
IF EXISTS (select count(name) from test_table2 group by name HAVING count(name) > 1)
BEGIN
  insert into #temp_cols  
  SELECT M.ID_PK,  
  substring(M.NAME,1,1)+'_'+ N.NAME 
  FROM TEST_TABLE1 M WITH (NOLOCK) 
  LEFT JOIN TEST_TABLE2 N  ON M.ID_PK=N.ID_FK  
END

ELSE
BEGIN
  insert into #temp_cols  
  SELECT M.ID_PK,  
  N.NAME 
  FROM TEST_TABLE1 M WITH (NOLOCK) 
  LEFT JOIN TEST_TABLE2 N  ON M.ID_PK=N.ID_FK 
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...