基于单个 SQL 函数中的两个 SELECT 语句计算最小值(SQL Server 2014)
Calculating MINIMUM value based on two SELECT statement in Single SQL FUNCTION (SQL Server 2014)
我正在尝试创建一个 SQL FUNCTION
,如果我输入 "a_id"。 SQL 应该 return 我基于 3 个不同 c_id 的最低成本。
我的表格如下。
TB1 : A (a_id (pk),a_name,a_description,a_qh)
TB2: AC (ac_id (pk),a_id(fk),c_id(fk),ac_cost)
TB3: C (c_id(pk),c_name)
举个例子:如果我有下面的 table 并且我输入了 a_id 的 1 那么 SQL 应该能够找到与 [=37 相关联的所有 c_id =] of 1. 然后基于那个 SQL 应该能够计算出基于成本的最小值。对于下面的示例 a_id =1 SQL 应该 return 我 c_id 1 因为它的最低成本是 150 150,155 和 160 中的 160 :
a_id a_description c_id Cost
1 RS 1 150.0000
2 BS 1 145.0000
3 GS 1 130.0000
1 RS 2 155.0000
14 GH 2 120.0000
1 RS 3 160.0000
14 GH 3 125.0000
我创建了两个 SELECT
语句来实现此目的:
语句 1:
SELECT
c_id, Cost, a_id
FROM
AC
WHERE
a_ID = 1); -- This code returns all c_id associated with one a_id
声明 2:
SELECT
MIN(AC.cost), c_id, a_ID
FROM
AC
WHERE
a_ID = 1
GROUP BY
c_id, a_ID
HAVING
MIN(AC.COST) <= (SELECT MIN(AC.COST) FROM AC) -- This code calculates minimum cost based on 3 different c_id. AS 1 a_id can be sell be 3 different c_id
我的困境是:我应该如何在单个函数中使用以上两个SELECT
语句来实现最低的ac.Cost?
提前致谢!
根据我所见,我认为您不需要其他表格,只需 AC。这是一个排名查询
select *
from
(select
*,
rank() over (partition by a_id order by cost asc) as cost_rank
from
AC) a
where
cost_rank = 1 and a_id = 1
我正在尝试创建一个 SQL FUNCTION
,如果我输入 "a_id"。 SQL 应该 return 我基于 3 个不同 c_id 的最低成本。
我的表格如下。
TB1 : A (a_id (pk),a_name,a_description,a_qh)
TB2: AC (ac_id (pk),a_id(fk),c_id(fk),ac_cost)
TB3: C (c_id(pk),c_name)
举个例子:如果我有下面的 table 并且我输入了 a_id 的 1 那么 SQL 应该能够找到与 [=37 相关联的所有 c_id =] of 1. 然后基于那个 SQL 应该能够计算出基于成本的最小值。对于下面的示例 a_id =1 SQL 应该 return 我 c_id 1 因为它的最低成本是 150 150,155 和 160 中的 160 :
a_id a_description c_id Cost
1 RS 1 150.0000
2 BS 1 145.0000
3 GS 1 130.0000
1 RS 2 155.0000
14 GH 2 120.0000
1 RS 3 160.0000
14 GH 3 125.0000
我创建了两个 SELECT
语句来实现此目的:
语句 1:
SELECT
c_id, Cost, a_id
FROM
AC
WHERE
a_ID = 1); -- This code returns all c_id associated with one a_id
声明 2:
SELECT
MIN(AC.cost), c_id, a_ID
FROM
AC
WHERE
a_ID = 1
GROUP BY
c_id, a_ID
HAVING
MIN(AC.COST) <= (SELECT MIN(AC.COST) FROM AC) -- This code calculates minimum cost based on 3 different c_id. AS 1 a_id can be sell be 3 different c_id
我的困境是:我应该如何在单个函数中使用以上两个SELECT
语句来实现最低的ac.Cost?
提前致谢!
根据我所见,我认为您不需要其他表格,只需 AC。这是一个排名查询
select *
from
(select
*,
rank() over (partition by a_id order by cost asc) as cost_rank
from
AC) a
where
cost_rank = 1 and a_id = 1