首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

查询不到数据怎么显示为0

2013-08-01 
查询不到数据如何显示为0本帖最后由 wdxgdiy 于 2013-07-23 14:52:19 编辑礼物表:idname1黄瓜2西红柿3西瓜

查询不到数据如何显示为0
本帖最后由 wdxgdiy 于 2013-07-23 14:52:19 编辑

礼物表:
id    name
1     黄瓜
2     西红柿
3     西瓜
持有表:
id   用户名   礼物id   数量
1    张三     1        3

想根据所有礼物查询某人持有数量

where name='张三'

用户名   礼物名   数量
张三     黄瓜     3
张三     西红柿   0
张三     西瓜     0

where name='李四'

用户名   礼物名   数量
李四     黄瓜     0
李四     西红柿   0
李四     西瓜     0
SQL 查询 疑难
[解决办法]
select b.用户名,a.礼物名,b.数量
from 
礼物表 a,持有表 b
[解决办法]
这个通过一条语句是不可能的
对于name = '张三'的情况,可以做到
对于name = '李四'的情况,因为数据表中不存在李四,所以不可能通过一条语句来实现将李四作为结果集中的一列出现。
楼主需要存储过程吗?
[解决办法]
DECLARE @name SYSNAME
SET @name = '张三'

;WITH tb1(id,NAME)
AS
(
SELECT 1,'黄瓜'
UNION ALL 
SELECT 2,'西红柿'
UNION ALL
SELECT 3,'西瓜'
),
 tb2(id,用户名,礼物id,数量)
AS
(
SELECT 1,'张三',1,3
)

SELECT 用户名 = isnull(tb2.用户名,@name),礼物名 = tb1.name,数量 = isnull(tb2.数量,0) FROM tb1 LEFT JOIN tb2 on tb1.id = tb2.礼物id 
AND tb2.用户名=  @name

结果如下:
用户名礼物名数量
张三黄瓜3
张三西红柿0
张三西瓜0


DECLARE @name SYSNAME
SET @name = '李四'

;WITH tb1(id,NAME)
AS


(
SELECT 1,'黄瓜'
UNION ALL 
SELECT 2,'西红柿'
UNION ALL
SELECT 3,'西瓜'
),
 tb2(id,用户名,礼物id,数量)
AS
(
SELECT 1,'张三',1,3
)

SELECT 用户名 = isnull(tb2.用户名,@name),礼物名 = tb1.name,数量 = isnull(tb2.数量,0) FROM tb1 LEFT JOIN tb2 on tb1.id = tb2.礼物id 
AND tb2.用户名=  @name


如下:
用户名礼物名数量
李四黄瓜0
李四西红柿0
李四西瓜0

[解决办法]
If not object_id('[礼物表]') is null
Drop table [礼物表]
Go
Create table [礼物表]([id] int,[name] nvarchar(3))
Insert [礼物表]
Select 1,N'黄瓜' union all
Select 2,N'西红柿' union all
Select 3,N'西瓜'
Go
--Select * from [礼物表]
If not object_id('[持有表]') is null
Drop table [持有表]
Go
Create table [持有表]([id] int,[用户名] nvarchar(2),[礼物id] int,[数量] int)
Insert [持有表]
Select 1,N'张三',1,3
Go
--Select * from [持有表]

select a.id,a.name,SUM(ISNULL(b.数量,0)) 数量
from [礼物表] a
left join [持有表] b
on a.id=b.礼物id 
and b.用户名='张三'
group by a.id,a.name
/*
id          name 数量
----------- ---- -----------
1           黄瓜   3
3           西瓜   0
2           西红柿  0

(3 行受影响)
*/
select a.id,a.name,SUM(ISNULL(b.数量,0)) 数量
from [礼物表] a
left join [持有表] b
on a.id=b.礼物id 
and b.用户名='李四'
group by a.id,a.name
/*
id          name 数量
----------- ---- -----------
1           黄瓜   0
3           西瓜   0
2           西红柿  0

(3 行受影响)
*/

[解决办法]
if rs.recordcount=0 then
某变量=0
end if
[解决办法]
用isnull(字段,0)来实现有什么问题吗?

热点排行