如何在一条SQL语句中设定不同的查询条件?

angelcool 2010-06-22 05:23:36
表a有如下三个字段:
OrgID Flag Type

需要获得满足:
1、A1 = Flag为1的所有OrgID的总量;
2、A2 = Type为2的所有OrgID的总量;

最终要得到A3= A1/A2;



如何用一条语句实现??
...全文
335 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelcool 2010-06-23
  • 打赏
  • 举报
回复
declare @A3 Float

select A3=(select count(1) from a where Flag=1)*100
/(select count(1) from a where Type=2)

这样可以得到一个整数结果,但实际上应该是一个小数值才对。

有其他函数或者其他除法表达式?

还是我的变量定义不对?
angelcool 2010-06-23
  • 打赏
  • 举报
回复
问题中描述的查询条件只设定一个字段作为查询条件,是为了描述问题,实际上的查询条件涉及多个字段。

所以应该无法使用CASE。

请大侠帮忙!
修改一下昵称 2010-06-23
  • 打赏
  • 举报
回复
select cast((cast(3 as numeric(18,2))/cast(4 as numeric(18,2))) as numeric(18,2)) as f
/*
f
---------------------------------------
0.75

(1 行受影响)
*/
angelcool 2010-06-23
  • 打赏
  • 举报
回复
请大侠帮帮忙呀
hello926 2010-06-22
  • 打赏
  • 举报
回复
SELECT A1=SUM(CASE flag when 1 then orgid end),
A2=SUM(CASE flag when 2 then orgid end),
A3=SUM(CASE flag when 1 then orgid end)/SUM(CASE flag when 2 then orgid end)
from tb
xiaoliaoyun 2010-06-22
  • 打赏
  • 举报
回复


SELECT A1 = SUM(CASE WHEN Flag = 1 THEN OrgID END)
,A2 = SUM(CASE WHEN Type = 2 THEN OrgID END)
,A3 = CASE WHEN SUM(CASE WHEN Type = 2 THEN OrgID END) = 0 THEN 0
ELSE SUM(CASE WHEN Flag = 1 THEN OrgID END)* 1.0
/SUM(CASE WHEN Type = 2 THEN OrgID END) END
FROM A

TheGodOfGods 2010-06-22
  • 打赏
  • 举报
回复
if object_id('a') IS NOT NULL
drop table a
create table a(OrgID [int] IDENTITY(1,1) NOT NULL, Flag int,Type int)
insert into a
select 1, 1 union all
select 1, 2 union all
select 1, 3 union all
select 2, 2 union all
select 3, 2 union all
select 4, 2

--期望结果
--A1 = 3 A2 = 4
--A3 = 3/4 = 0
select A3=(select count(1) from a where Flag=1)/(select count(1) from a where Type=2)
/*
A3
-----------
0
(1 行受影响)
*/
select A3=(select count(1) from a where Flag=1)%(select count(1) from a where Type=2)
/*
A3
-----------
3
(1 行受影响)
*/
TheGodOfGods 2010-06-22
  • 打赏
  • 举报
回复
去掉后边from a 就不会有多列了
结果为零是运算“/”的问题
SELECT A3 = 3/4
/*
A3
0
*/
angelcool 2010-06-22
  • 打赏
  • 举报
回复
而且得到的结果不是一个数值,而是很多行数据,并且都是零。

???
zhousq00 2010-06-22
  • 打赏
  • 举报
回复

Select case Flag When 1 Then Count(OrgID) End case as A1/Case Type When 2 Then Count(OrgID) End case As A2 From a

angelcool 2010-06-22
  • 打赏
  • 举报
回复
怎么得到了一堆零??
jwdream2008 2010-06-22
  • 打赏
  • 举报
回复
select A3=(select count(1) from a where Flag=1)/(select count(1) from a where Type=2) from a

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧