作者grence (多想两分钟 = =")
看板Database
标题Re: [SQL ] 两个资料表要产出数字 (count)
时间Fri Dec 5 15:52:01 2008
declare @t table(declare_no char(2),declare_name nvarchar(4))
insert @t values('01','定期申报')
insert @t values('02','就职申报')
insert @t values('03','补正申报')
insert @t values('04','动态申报')
insert @t values('05','信托申报')
declare @t2 table(name nchar(2),type varchar(2))
insert @t2 values('某甲','02')
insert @t2 values('某甲','03')
insert @t2 values('某乙','05')
insert @t2 values('某乙','03')
insert @t2 values('某丙','04')
insert @t2 values('某丁','05')
insert @t2 values('路人','01')
insert @t2 values('男人','02')
insert @t2 values('女人','02')
--select * from @t
--select * from @t2
SELECT *
FROM @t2
left join @t on type=declare_no
select *,
case declare_name when '定期申报' then 1 else 0 end[定期申报],
case declare_name when '就职申报' then 1 else 0 end[就职申报],
case declare_name when '补正申报' then 1 else 0 end[补正申报],
case declare_name when '动态申报' then 1 else 0 end[动态申报],
case declare_name when '信托申报' then 1 else 0 end[信托申报]
FROM @t2
left join @t on type=declare_no
select
sum(case declare_name when '定期申报' then 1 else 0 end)[定期申报],
sum(case declare_name when '就职申报' then 1 else 0 end)[就职申报],
sum(case declare_name when '补正申报' then 1 else 0 end)[补正申报],
sum(case declare_name when '动态申报' then 1 else 0 end)[动态申报],
sum(case declare_name when '信托申报' then 1 else 0 end)[信托申报]
FROM @t2
left join @t on type=declare_no
/*
写法想精简一点可以查 pivot用法
我实验的结果是效率没比较好,也没比较好读…
*/
※ 引述《roga (凝视)》之铭言:
: 各位板友大家好,小弟想请教一个 SQL 的问题
: Delares 资料表
: ________________________
: declare_no declare_name
: 01 定期申报
: 02 就职申报
: 03 补正申报
: 04 动态申报
: 05 信托申报
: Members 资料表
: ________________________
: name type
: 某甲 02
: 某甲 03
: 某乙 05
: 某乙 03
: 某丙 04
: 某丁 05
: 路人 01
: 男人 02
: 女人 02
: 我想产生一张申报状况的资料表,长得这样:
: 定期申报 就职申报 补正申报 动态申报 信托申报
: ______________________________________________________
: 人数 人数 人数 人数 人数
: 请问有好的作法吗?
: 现在的句子是
: SELECT
: d.declare_no, d.declare_name, count(type) AS result
: FROM Members, Declares d
: WHERE type = d.declare_no
: GROUP BY d.declare_no, d.declare_name
: 但是产出的是
: declare_no declare_name result
: 01 定期申报 1
: 02 就职申报 3
: 03 补正申报 2
: 04 动态申报 1
: 05 信托申报 2
: 但是这样不太符合需求,希望对 SQL 熟悉的人可个忙
: 谢谢!我的资料库是 SQL 2005 ,谢谢 ^^
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.172.157
※ 编辑: grence 来自: 210.61.172.157 (12/05 15:57)
1F:推 roga:谢谢,您真的很强 ^^ 12/05 17:41
2F:推 chrismaggie:恩~写的语法满实用的喔~高手 12/05 20:59