教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
  网站导航: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧  

怎么用SQL语句写交叉表啊?

教程推荐
『怎么用SQL语句写交叉表啊?』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-4-28 9:15:09 
每次写交叉表就头疼,请大家帮忙
库存表pharmacy
ID  药品编号  库存量   仓库  有效期
1    1         1      1   2009-11-12
2    1         3      1   2008-12-12
3    2         4      2   2008-12-12

药品表leechdom
编号  名称   规格  价格
1     abc  abc   14 
2     cde  cdaf  12

仓库只有两个,要形成同一仓库的量的合计,像这样的结果
药品编号   名称  规格  价格  仓库1量  仓库2量 
 1         abc  abc   14   4        0
 2        cde  cdaf  12   0        4

这个问题第1个回答:
SQL code

select a.编号,a.名称,a.规格,a.价格

        sum(case when 仓库=1 then 库存量 else 0 end) 仓库1量,

       sum(case when 仓库=2 then 库存量 else 0 end) 仓库2量

from leechdom a

  left join pharmacy b

    on a.编号=b.编号

group by a.编号,a.名称,a.规格,a.价格


这个问题第2个回答:
SQL code

declare @sql varchar(8000)

set @sql='select a.编号,a.名称,a.规格,a.价格'

select @sql=@sql+',sum(case when b.仓库='+ltrim(仓库)+' then b.库存量 else 0 end) [仓库'+ltrim(仓库)+']'

from (select distinct 仓库 from pharmacy) t



exec (@sql+' from leechdom a left join pharmacy b on a.编号=b.编号 group by a.编号,a.名称,a.规格,a.价格')


这个问题第3个回答:
SQL code

--> 测试数据: #pharmacy

if object_id('tempdb.dbo.#pharmacy') is not null drop table #pharmacy

create table #pharmacy (ID int,药品编号 int,库存量 int,仓库 int,有效期 datetime)

insert into #pharmacy

select 1,1,1,1,'2009-11-12' union all

select 2,1,3,1,'2008-12-12' union all

select 3,2,4,2,'2008-12-12'

--> 测试数据: #leechdom

if object_id('tempdb.dbo.#leechdom') is not null drop table #leechdom

create table #leechdom (编号 int,名称 varchar(3),规格 varchar(4),价格 int)

insert into #leechdom

select 1,'abc','abc',14 union all

select 2,'cde','cdaf',12



select

    药品编号=a.编号,

    名称=max(a.名称),

    规格=max(a.规格),

    价格=max(a.价格),

    仓库1量=sum(case b.仓库 when 1 then 库存量 else 0 end),

    仓库2量=sum(case b.仓库 when 2 then 库存量 else 0 end)

from #leechdom a

join #pharmacy b on a.编号=b.药品编号

group by a.编号



/*

药品编号    名称 规格 价格        仓库1量     仓库2量

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

1           abc  abc  14          4           0

2           cde  cdaf 12          0           4

*/




这个问题第4个回答:
SQL code

create table pharmacy(ID int,药品编号 int,库存量 int,仓库 int,有效期 datetime)

insert into pharmacy select 1  ,  1   ,      1   ,   1 ,  '2009-11-12' 

insert into pharmacy select 2  ,  1   ,      3   ,   1 ,  '2008-12-12' 

insert into pharmacy select 3  ,  2   ,      4   ,   2 ,  '2008-12-12' 



create table leechdom(编号 int,名称 varchar(10),规格 varchar(10),价格 int)

insert into leechdom select 1  ,   'abc',  'abc' ,  14  

insert into leechdom select 2  ,   'cde',  'cdaf',  12 

go

declare @sql varchar(8000)

set @sql='select a.编号,a.名称,a.规格,a.价格'

select @sql=@sql+',sum(case when b.仓库='+ltrim(仓库)+' then b.库存量 else 0 end) [仓库'+ltrim(仓库)+']'

from (select distinct 仓库 from pharmacy) t



exec (@sql+' from leechdom a left join pharmacy b on a.编号=b.药品编号 group by a.编号,a.名称,a.规格,a.价格')

go 

drop table pharmacy,leechdom



/*



编号          名称         规格         价格          仓库1         仓库2         

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

1           abc        abc        14          4           0

2           cde        cdaf       12          0           4

*/


】【关闭窗口
  上一页:
  下一页:
MsSql综合技巧:相关文章
MsSql综合技巧点击榜
普通教程Sql Server服务总是自动停止
普通教程sql本地事务和远程库地疑难
普通教程sql怎么样将表中字段顺序有含在
普通教程怎么样在存储过程A内再声明一个
普通教程【脑袋快想爆炸了- -!】 怎么样
普通教程关于级联删除地疑难,新手提问,
普通教程怎么样动态控制列数?
普通教程数据库恢复 MS2000
普通教程当数据库中varchar字段值为null
普通教程create function 怎么才无法要返
PHOTOSHOP - 基础教程 抠图专题 蒙版专题 3DsMax 基础 设计实例 Maya设计实例
3D设计教程
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright ? 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL. 电脑硬件 电脑知识 教程学习
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光