基于单个 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