日期:2014-05-17  浏览次数:20656 次

查询不到数据如何显示为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