船表:(船号,船厂,船种)
HullNo Yard Type
H2317 现代重工 Bulk
H2319 三星 Container期望统计格式:
船厂 船种 艘数
现代重工 Bulk 1
现代重工 Container 0
三星 Bulk 0
三星 Container 1有很多船厂,拒绝穷举case,谢谢
HullNo Yard Type
H2317 现代重工 Bulk
H2319 三星 Container期望统计格式:
船厂 船种 艘数
现代重工 Bulk 1
现代重工 Container 0
三星 Bulk 0
三星 Container 1有很多船厂,拒绝穷举case,谢谢
解决方案 »
- 为什么有错误啊,上午还能用下午就不行了
- 单纯表合并,没有主键!
- 建立一张特殊表的问题(在线等待!立即结贴!)
- 不采用考勤机来做的考勤系统,只要实现日考勤、出缺勤月汇总,人员在600~800,其设计跟实现需要注意哪些方面(之前都没接触过考勤)
- Win2000修改了名称后 ,Sql Server 7.0 无法启动了 .
- 但是在触发器里面,怎么知道是insert 还是delete 触发的呢?
- SQL数据库自动备份计划排程出问题了!!!
- 怎样写这个SQL语句?
- 请问有以下这种查询语句吗?
- 如何用拨号实现SQL SERVER远程数据复制
- 【百分紧急求救】关于事物的几个疑惑点,希望各位老师帮助.
- 问一个简单的SQL一句
(select Yard from 表 group by Yard) a
cross join
(select Type from 表 group by Type) b
left join
(select Yard,Type,CT=count(1) from 表 group by Yard,Type) c
on a.Yard=c.Yard and b.Type=c.Type
declare @T table(HullNo varchar(5),Yard varchar(8),Type varchar(9))
insert @T
select 'H2317','现代重工','Bulk' union all
select 'H2319','三星','Container'select 船厂=a.Yard,船种=b.Type,艘数=isnull(c.CT,0) from
(select Yard from @T group by Yard) a
cross join
(select Type from @T group by Type) b
left join
(select Yard,Type,CT=count(1) from @T group by Yard,Type) c
on a.Yard=c.Yard and b.Type=c.Type
order by a.Yard desc
/*
船厂 船种 艘数
现代重工 Bulk 1
现代重工 Container 0
三星 Bulk 0
三星 Container 1
*/
insert into tb values('H2317' , '现代重工', 'Bulk')
insert into tb values('H2319' , '三星' , 'Container')
goselect t.Yard 船厂 , t.type 船种 , sum(case when tb.hullno is null then 0 else 1 end) 艘数 from
(
select t1.Yard , t2.type from
(select Yard from tb) t1
cross join
(select Type from tb) t2
) t
left join tb
on t.yard = tb.yard and t.type = tb.type
group by t.yard,t.type
order by t.yard,t.type
drop table tb/*
船厂 船种 艘数
---------- ---------- -----------
三星 Bulk 0
三星 Container 1
现代重工 Bulk 1
现代重工 Container 0
(所影响的行数为 4 行)
*/