SQL存储过程:如何在同一查询中使用返回值?

时间:2010-01-27 23:34:04

标签: sql-server stored-procedures

如何在同一过程中使用查询返回的值? (对不起诺布主义)

我正在努力让一些用户以一个最初的开头作为列表 - 即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 个答案:

答案 0 :(得分:2)

这肯定适用于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 :(得分:1)

按查询使用分组:

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)

答案 2 :(得分:0)

您可以在GROUP BY子句中使用initial:

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

答案 3 :(得分:0)

回答正确的问题:

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;