作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] 两张资料表合成一张
时间Sun May 18 00:34:27 2014
※ 引述《JGC18 (JGC)》之铭言:
: 资料库名称:
: MS SQL Server
: 资料库版本:
: 2008 R2
: 内容/问题描述:
: 大家好,小弟目前碰到要把两张资料表合成一张显示
: table_A
: 栏位有
: store_id, data, enable
: H1 xxx.. 1
: H1 yyy.. 1
: H3 zzz.. 0
: H4 xyv.. 1
: -----------------------------
: tabke_B
: store_id, store_name
: H1 ABC
: H2 DEF
: H3 GHI
: H4 JKL
: -----------------------------
: 目前想把他合成一张表(只抓出table A中 enable=1的资料)如下
: store_id store_name, count
: H1 ABC 2
: H4 JKL 1
: 我会算出coumt
: select count(*),store_id from table_A where eable=1 group by store_id
: 但要怎麽把table_B的store_name加上去呢
可以考虑以下两种写法:
(A) subquery
(B) join
以你的例子来说:
create table table_a (
store_id varchar(2),
data varchar(10),
enable int
)
go
insert into table_A values ('H1', 'xxx', 1)
insert into table_A values ('H1', 'yyy', 1)
insert into table_A values ('H3', 'zzz', 0)
insert into table_A values ('H4', 'xyv', 1)
go
create table table_B (
store_id varchar(2) primary key,
store_name varchar(10)
)
go
insert into table_b values ('H1', 'ABC')
insert into table_b values ('H2', 'DEF')
insert into table_b values ('H3', 'GHI')
insert into table_b values ('H4', 'JKL')
go
group by 的用法您已经会了,只要再多加一道 subquery 即可查出店名,像这样:
select store_id,
(select store_name from table_b where store_id = a.store_id) as store_name,
count(*) as counts
from table_a a
where enable = 1
group by store_id
go
另一种写法就是网友提到的 join:
select b.store_id, b.store_name, count(*) as counts
from table_b b join table_a a on a.store_id = b.store_id
where enable = 1
group by b.store_id, b.store_name
go
其实您在另一篇的写法已经很接近了,只不过卡在 SQL Server 语法的规定:
写在 select 栏位清单的项目,必须是统计对象或者是那些写在 group by 的栏位。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.38.87.52
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Database/M.1400344470.A.F15.html
1F:推 JGC18:谢谢TeemingVoid,如您第一个方法,我後来使用了subquery 05/19 10:35
2F:→ JGC18:再次感谢^^ 05/19 10:35