Хранимая процедура SQL: как использовать возвращаемое значение в том же запросе? - PullRequest
1 голос
/ 28 января 2010

Как использовать значение, возвращаемое запросом в той же процедуре? (извините за нубизм)

Я пытаюсь получить количество пользователей с первоначальным началом, начиная с какого-либо списка, т.е. A (4) B (2) c (5) и т. Д.

  SELECT DISTINCT LEFT(last_name, 1) AS initial 
    FROM users 
ORDER BY initial

Как мне тогда спросить:

select COUNT(*) as NumTeam 
  from users 
 where last_name like initial + '%'

Ответы [ 4 ]

2 голосов
/ 28 января 2010

Это определенно будет работать на SQL Server 2005 (на котором я тестировал):

DECLARE @People TABLE (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [fname] [nvarchar](50) NOT NULL,
    [lname] [nvarchar](50) NOT NULL
)

INSERT INTO @People([fname], [lname])
SELECT 'Joseph', 'Adama' UNION ALL
SELECT 'Adam', 'Joseph' UNION ALL
SELECT 'Bryan', 'Adams' UNION ALL
SELECT 'Charlie', 'Brown' UNION ALL
SELECT 'Charles', 'Babbage' UNION ALL
SELECT 'Charles', 'Schultz'

SELECT        LEFT(lname, 1) [Letter], COUNT(id) [Count]
FROM          @People
GROUP BY      LEFT(lname, 1)
ORDER BY      LEFT(lname, 1)

Это дает набор результатов:

Letter   Count
A        2
B        2
J        1
S        1   
1 голос
/ 28 января 2010

использовать группу по запросу:

select left(last_name, 1) as initial, count(*) as initial_count
  from users
  group by left(last_name, 1)
  order by left(last_name, 1)
0 голосов
/ 28 января 2010

для правильного ответа на вопрос:

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 | 
+------+------+------+--------------------+

это исходит от http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

Чтобы конкретно ответить на ваш вопрос, я полагаю, вы хотите что-то вроде этого:

    SELECT LEFT(last_name, 1) AS initial,COUNT(*) as NumTeam FROM users GROUP BY LEFT(last_name, 1)

Если вы хотите инициалы в алфавитном порядке:

SELECT * FROM(
 SELECT LEFT(last_name, 1) AS initial,COUNT(*) as NumTeam FROM users GROUP BY LEFT(last_name, 1)
) as initial_counts order by initial;
0 голосов
/ 28 января 2010

Вы можете использовать инициал в предложении GROUP BY:

SELECT DISTINCT LEFT(last_name, 1) AS initial, count(1) AS NumTeam 
FROM users
GROUP BY initial ORDER BY initial
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...