2016-09-03 6 views
0

Я пытаюсь следующий, чтобы перейти от X к Y:Число запросов в SQL Server

tblStationary ---> • X

Name Stationary 
------------------- 
Peter Crayon 
Peter Pencil 
Peter Crayon 
Peter Crayon 
Peter Crayon 
Peter Pencil 
John Crayon 
John Crayon 

на этот запрос: ----> Y

Stationary Amount 
----------------- 
Crayon  2 
Pencil  1 

Карандаш и карандаш должны учитываться только один раз на человека. то есть: Когда Петр 2 карандаша должно быть расценено как 1. Так вперед

Я попытался следующие, и это не помогает:

SELECT 
    Stationary, COUNT(Name) AS Number 
FROM 
    (SELECT * FROM dbo.tblStationary) AS t 
GROUP BY 
    Stationary 

ответ

0

Я не знаю, если ваша СУБД поддерживает SELECT DISTINCT, но если это делает, вы можете использовать его так:

SELECT Stationary, COUNT(Name) AS Number 
FROM (select DISTINCT * FROM dbo.tblStationary) as t 
GROUP BY Stationary 

Так что я просто добавил DISTINCT во внутреннем запросе.

+0

Спасибо, похоже, что это работает. –

+0

Этот запрос вернет счет 1, для которого имя имеет только один стационарный, в то время как в вашем вопросе вы четко указали, что «у Петра есть 2 карандаша, он должен считаться 1», и я уверен, что он не удовлетворит это условие – Susang

+1

'SELECT DISTINCT 'будет выводить каждую комбинацию (человек, стационарный) только один раз. Поэтому он подсчитывается один раз. – redneb

1

Если так, то мы можем просто сделать это следующим образом

SELECT Stationary, COUNT(DISTINCT NAME) AS Number 
FROM tblStationary 
GROUP BY Stationary 
+1

Это лучший ответ. –