2010-12-08 2 views
1

я хотел бы выбрать только при условии, что другой выбор == 2Выберите только если количество == 2 SQL Server 2008

, например

select field1 from table1 where count((select field2 from table2)) = 2 

это возможно?

+2

Там нет никакой связи между table1.field1 и table2.field2 перечисленных в вашем вопросе ... – JNK

+1

Все жалуются на ответы, в которых они предполагают то, что вы пытаетесь сделать. Короткий ответ: нет. ** Однако **, мы можем предложить что-то, если бы знали, что вы пытаетесь. – Brad

+0

Можете ли вы прояснить свою цель этим? Основание выбора в таблице 1 на основе подсчета другой таблицы без отношения является бессмысленным на поверхности ... – JNK

ответ

2

Вы должны изучить HAVING CLAUSE SQL's GROUP BY.

например.

SELECT * FROM TABLE1 
WHERE <MYKEY> IN (
    SELECT <MYKEY> 
    FROM TABLE2 
    GROUP BY <MYKEY> HAVING COUNT(*) = 2 --Better to use > 1 
) 
+0

Я ушел, чтобы закодировать его на моем сервере sql, и когда я вернусь, вы уже отправили меня! haha – phillip

+0

LOL ... Извините! – James

+0

Вы предполагаете, что OP хочет подсчет строк в 'table2'. ИМХО, это необоснованно. – Brad

2
select field1 from table1 where (select count(field2) from table2)=2 
+0

Это будет работать, но вы принимаете то, что хочет OP. Кроме того, это возвращает либо все строки в 'table1', если' table2' имеет ровно две строки, либо ничего не возвращает. – Brad

+0

Вы предполагаете, чего хочет OP. Слишком рискованно. – Brad

+1

@Brad сказал: «Вы предполагаете, чего хочет OP. Слишком рискованно. «OP не ясно, что они хотят, и код, который они дают, не работает, но, похоже, пытается подсчитать строки в таблице2. –

1

попробовать:

SET NOCOUNT ON 
declare @a table (RowID int) 
insert @a values(1);insert @a values(2);insert @a values(3); 
declare @b table (RowID int) 
insert @b values(10);insert @b values(20) 
SET NOCOUNT OFF 

select a.RowID FROM @a a WHERE 2=(SELECT COUNT(RowID) FROM @b) 

delete @b where RowID=20 

select a.RowID FROM @a a WHERE 2=(SELECT COUNT(RowID) FROM @b) 

ВЫВОД:

RowID 
----------- 
1 
2 
3 

(3 row(s) affected) 

(1 row(s) affected) 

RowID 
----------- 

(0 строк (ы) пострадавших)

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