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

请教,SQL两表筛选查询
请教,SQL两表筛选查询




数据库名:Datas
表1:teb1
表2:teb2


teb1

code 销售情况 进货渠道
P001 热销 北京动物园进货
P002 好销 天津机场进货
P003 滞销 北京进货
P004 难销 山东进货
P005 普通 全国进货



teb2

code 名称 价格
P002 梅花 5元
P002 红花 2元
P002 绿花 0元
P001 白酒 3元
P001 啤酒 1元
P003 衣服 6元
P004 帽子 0元
P004 鞋子 0元
P005 凳子 2元
P005 灯管 2元
P005 茶具 1元
P005 红茶 0元


表2的code是根据表1的code来的。
现在,我想把teb1表里所有的数据列出来。并且把teb2表里的价格 Sum加起来显示在表1里。名称也要累叠起来并且使用分号分开。
表1的code是不会重复的,联合查询的时候,显示出来的code不要重复。

希望表1查询的结果如下:
teb1
code 销售情况 进货渠道 累加金额 累叠名称
P001 热销 北京动物园进货 4元 白酒,啤酒
P002 好销 天津机场进货 7元 梅花,红花,绿花
P003 滞销 北京进货 6元 衣服
P004 难销 山东进货 0元 帽子,鞋子
P005 普通 全国进货 5元 凳子,灯管,茶具,红茶



不过,如果累叠名称太多后,看起来不方便,得拉开表很长。
有什么方法,做一个Where条件查询,查询包含名称,就能找到这条记录呢?
  比如,我在Where里加一个条件: 《啤酒》就能在teb1里找到P001这条记录

希望,能做这样的查询,请教大家写一个SQL语句。谢谢!



------解决方案--------------------
SQL code

--sql 2005

--生成楼主所说结果集查询语句

select a.code,a.销售情况,a.进货渠道,sum(b.价格) 累加金额,
    stuff((select ','+名称 from teb2 where code = b.code for xml path('')),1,1,'') 累叠名称
from teb1 a join teb2 b on a.code = b.code
where exists (select 1 from teb2 where code = b.code and 名称 = '啤酒')

--只查询啤酒相关数据

select *
from teb1 a join teb2 b on a.code = b.code
where exists (select 1 from teb2 where code = b.code and 名称 = '啤酒')

------解决方案--------------------
探讨

如果想在条件中查询 SUM的值呢?
比如

where sum(价格)=20

这样查询是错误的。有什么好方法吗?