作者TonyQ (沉默是金)
看板Database
标题Re: [SQL ] 问个SQL语法
时间Mon May 11 16:48:56 2009
※ 引述《ClubT (Debug能不能用杀虫济啊)》之铭言:
: 我是用SQL SERVER 2000
: 现在我要筛选一个状态的栏位
: select 编号,count(CASE 状况 when 1 then 流水号 END),
: count(CASE 状况 when 2 then 流水号 END) from 表格名称 group by 编号
: 结果就会出现每个编号
: 状况=1 时的数量 和 状况=2时的数量
: 但是如果我要同时筛选2个状态
: 希望的结果是:
: 编号,(状态一=1 and 状态二=1 的数量),(状态一=1 and 状态二=2 的数量),
: (状态一=2 and 状态二=1 的数量),(状态一=2 and 状态二=2 的数量)
: 像这样 SQL语法 要怎麽下
: THANKS
这个 sql 有一点复杂 , 我想的到可以有两个选择 ,
一个是先做出 group by no,状态1,状态2 查出各状态的数量简 view ,
再从这 view 中捞出你想要的资料 , 出来再组合 . (只是这样资料行就是纵向的了:p)
ex.
select no,state1,state2 ,count(id) as cnt
from tb_data
group by no ,stat1,state2
另一个比较符合原题 , 透过 subquery 来查.
SELECT tb.no , (
select count(id) from tb_data
where no=tb.no and state1=1 and stat2=1
) ,
(
select count(id) from tb_data
where no=tb.no and state1=1 and stat2=2
), (
select count(id) from tb_data
where no=tb.no and state1=2 and stat2=1
) ,
(
select count(id) from tb_data
where no=tb.no and state1=2 and stat2=2
)
from tb_data tb
虽然说第一眼看起来这样效率好像很差 , 以前第一次看到这种写法时是这样想 , XD
我对 sql 的效率钻研不深 , 我不太确定这样会不会比较吃力 ,
我自己曾经在几万笔资料的小 table 下类似的 query 是感觉还好的状态 ,
大的现在还没机会碰...XD
--
ps.以上是 m$ sql server 2005/2008 操作的经验 ,
2000实在是没机会用到 , 我不确定有没有差异...:p
--
What do you want to have ? / What do you have?
从书本中,你可以发现我的各种兴趣。
从CD中,你可以了解我所喜欢的偶像明星。
或许从文字你很难以了解一个人,但从物品可以。
My PPolis , My past. http://ppolis.tw/user/Tony
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 221.169.78.140
※ 编辑: TonyQ 来自: 221.169.78.140 (05/11 16:53)