2015-07-17 4 views
0

У меня есть следующий тест таблицы:SQL Server 2008 R2: Выберите с условием

Таблица: Test

create table test 
(
number int, 
name varchar(10) 
); 

Вставка:

insert into test values(111,'PersonA'); 
insert into test values(211,'PersonB'); 
insert into test values(311,'PersonC'); 
insert into test values(111,'PersonA'); 
insert into test values(212,'PersonB'); 
insert into test values(313,'PersonC'); 
insert into test values(111,'PersonA'); 
insert into test values(211,'PersonB'); 

Теперь я хочу, чтобы отобразить эти записи, как если человек использовал два разных номера , то он должен показать там детали.

Если я хочу видеть от 1 до 2, то он должен показать мне детали лица, которые использовали 1 до 2 числа:

Результат: для 1 до 2

number name 
------------ 
111  PersonA 
211  PersonB 
212  PersonB 
311  PersonC 
313  PersonC 

Если я хотят видеть 2 до 2, то он должен показать мне детали лица, которые использовали 2 до 2 числа:

Результат: для 2 до 2

number name 
--------------- 
211  PersonB 
212  PersonB 
311  PersonC 
313  PersonC 
+1

Что вы м ean от 1 до 2 и от 2 до 2. вопрос не ясен. По моему пониманию вы в основном ищете разные цифры –

+0

@NoviceProgrammer, от 1 до 2 означает числа, используемые человеком. – MAK

+0

1 или 2 уникальных цифры в столбце «число». Это вы подразумеваете под этим? –

ответ

0

Ну, я сделал это с помощью КТР.

Для 1 до 2:

with cte 
AS 
(
    SELECT COUNT(DISTINCT Number) as a,Name from test 
    group by name 
) 
select DISTINCT x.Number,z.Name 
from cte z 
inner join test x 
ON z.name = x.name 
WHERE z.a between 1 and 2; 

Результат:

number name 
------------- 
111  PersonA 
211  PersonB 
212  PersonB 
311  PersonC 
313  PersonC 

Для 1 до 2:

with cte 
AS 
(
    SELECT COUNT(DISTINCT Number) as a,Name from test 
    group by name 
) 
select DISTINCT x.Number,z.Name 
from cte z 
inner join test x 
ON z.name = x.name 
WHERE z.a between 2 and 2; 

Результат:

number name 
------------- 
211  PersonB 
212  PersonB 
311  PersonC 
313  PersonC 
0
select * from test GROUP BY name 
HAVING COUNT(name) > 1 
+0

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

0

, если я не ошибаюсь, вы ищете это: -

---- for 1 or 2 
Select Distinct 
     * 
From test 
Where Cast(number As Varchar(20)) Like '%1%' Or Cast(number As Varchar(20)) Like '%2%' 

---- for 2 
Select Distinct 
     * 
From test 
Where Cast(number As Varchar(20)) Like '%2%' 
0
SELECT * from test 
Where number in (SELECT DISTINCT number FROM test) 
+0

Предполагая, что нет NULL, это просто вернет все строки –

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