你好朋友我正在开发一个从数据库中绘制数据的模块,问题是我必须首先绘制一系列经过数学公式的数据。到目前为止没问题,但我必须从一年中的几个月中获取数据,因此我必须重复这个过程十二次。我的真实问题是这样的:
我怎样才能在每个响应中只获得一行一列?
如果我尝试这样的事情......
DECLARE @cnt INT = 0;
WHILE @cnt < 12
BEGIN
select idestatus from order
SET @cnt = @cnt + 1;
END;
我将执行 12 个查询和 12 个表,而我只需要一个。我最终会将其转换为json,因此我希望将所有内容都放在一个响应表中。这是我的查询:
declare
@a decimal(5,2) = 0,
@d decimal(5,2) = 0,
@f1 decimal(5,2) = 0,
@f2 decimal(5,2) = 0
set
@a = (
select
COUNT(idEstatus) A_D
from t1
where (year(dat)) = 2017 and (month(dat)) = 1
and idEstatus = 2
)
set
@d = (
COUNT(idEstatus) A_D
from t1
where (year(dat)) = 2017 and (month(dat)) = 1
and idEstatus = 3
)
set @f1 =
(
select
COUNT(idEstatus) A_D
from t1
where (year(dat)) = 2017 and (month(dat)) = 1
and idEstatus = 2
)
set @f2 =
(
COUNT(idEstatus) A_D
from t1
where (year(dat)) = 2017 and (month(dat)) = 1
and idEstatus = 3
)
select
(((@a + @d)/2) *100)/((@f1 + @f2)/ 2) rf
如果也有人可以告诉我如何通过UNION订购它,那可能真的很有用。
您可以使用此示例简化上面的查询,但由于我们对您的表的架构以及您的最终目标的真正含义缺乏了解,它会受到一些限制。
这应该在一个步骤中完成您的查询,但它具有硬编码的 idEstatus 值(可能没问题)并且限制为一个月。
如果您真的需要下半年,则不清楚您的示例查询是否真的需要下半年,因为它似乎是同一日期(如果您想要年复一年,那么正确的答案是不同的)。
听起来你需要一个
group by