首页新闻找找看学习计划

sql select里添加一个新列,然后把这个新列赋值

0
悬赏园豆:20 [已解决问题] 解决于 2014-03-04 18:47

    数据库里有2个表,一个表是员工表users(id,code,name),另一个表签到表qiandao(id,uid,qdDate),其中uid为users表的主键id。

  我现在的需求是,使用一个select 取出每个员工的基本信息以及签到次数,如下:

id code name num

-----------------------

1  xx   小二      3

2  xx   小三      5

3  xx   小驴      7

------------------------------------------------------------------------------------

我写的sql 如下:select * ,(select count(*)  from qiandao where uid=id ) as num from users

但是结果num一直为0,这是什么问题呢?

有其他解决方法吗?最好是一个sql语句来搞定。

沐雪小程序开发者的主页 沐雪小程序开发者 | 初学一级 | 园豆:48
提问于:2014-02-22 21:16
< >
分享
最佳答案
0

测试的数据 希望能帮到你

收获园豆:8
wolfy | 老鸟四级 |园豆:2636 | 2014-02-23 10:46

谢谢。。

沐雪小程序开发者 | 园豆:48 (初学一级) | 2014-03-04 18:45
其他回答(3)
0

建议先用一个id值测试一下这个SQL:

select count(*)  from qiandao where uid=id
收获园豆:4
dudu | 园豆:39136 (高人七级) | 2014-02-22 21:41
0
--1、构造测试数据表
create table #users(id int,code varchar(50),name varchar(50))
create table #qiandao(id INT ,uid INT ,qdDate DATETIME)
--2、构造测试数据
INSERT INTO #users
SELECT 1,'x1','name1'
UNION ALL
SELECT 2,'x2','name2'
UNION ALL
SELECT 3,'x3','name3'

INSERT INTO #qiandao
SELECT 1,1,GETDATE()
UNION ALL
SELECT 2,1,GETDATE()
UNION ALL
SELECT 3,2,GETDATE()

--3、查询用户信息+签到次数
SELECT t1.*,num=isnull(t2.num,0) FROM #users t1
LEFT JOIN (SELECT uid,num=COUNT(id) FROM #qiandao GROUP BY uid ) t2
ON t2.uid=t1.id

--PS:你的问题出在子查询的id和uid是针对qiandao表的,而不是匹配的外部的users表,所有结果基本为0
收获园豆:4
幻天芒 | 园豆:36522 (高人七级) | 2014-02-24 10:18
0

select a.*,count(b.id) from user a left join qiandao b on a.id = b.uid

group by b.uid

 

我感觉挺简单的啊 为什么上面都搞得那么乱

收获园豆:4
闫怡飞 | 园豆:106 (初学一级) | 2014-02-26 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册