Sql 两个选择结果的计算(乘法)
我试图将从唯一查询的Sql 两个选择结果的计算(乘法),sql,sql-server,tsql,where-clause,lateral-join,Sql,Sql Server,Tsql,Where Clause,Lateral Join,我试图将从唯一查询的SELECT语句中得到的两个数字相乘。我想得到提供者的数量和提案的数量(我所做的查询显示了这一点),然后在同一行上将两者相乘(我不能这么做) 我制作了一个非常简单的示例向您展示(代码如下所示): 在两个部门创建两个提供商: CREATE TABLE ##Provider ( id INT, p_name VARCHAR(50), id_dep INT ) INSERT INTO ##Provider (id, p_name, id_dep) VALUES
SELECT
语句中得到的两个数字相乘。我想得到提供者的数量和提案的数量(我所做的查询显示了这一点),然后在同一行上将两者相乘(我不能这么做)
我制作了一个非常简单的示例向您展示(代码如下所示):
在两个部门创建两个提供商:
CREATE TABLE ##Provider
(
id INT,
p_name VARCHAR(50),
id_dep INT
)
INSERT INTO ##Provider (id, p_name, id_dep) VALUES
(1, 'toto', 10),
(2, 'toto', 11),
(3, 'tata', 9);
CREATE TABLE ##Proposal
(
id INT,
c_name VARCHAR(50),
id_dep INT
)
INSERT INTO ##Proposal (id, c_name, id_dep) VALUES
(1, 'propA', 10),
(2, 'propB', 09),
(3, 'propC', 10),
(4, 'propD', 10);
在2个部门创建4个提案:
CREATE TABLE ##Provider
(
id INT,
p_name VARCHAR(50),
id_dep INT
)
INSERT INTO ##Provider (id, p_name, id_dep) VALUES
(1, 'toto', 10),
(2, 'toto', 11),
(3, 'tata', 9);
CREATE TABLE ##Proposal
(
id INT,
c_name VARCHAR(50),
id_dep INT
)
INSERT INTO ##Proposal (id, c_name, id_dep) VALUES
(1, 'propA', 10),
(2, 'propB', 09),
(3, 'propC', 10),
(4, 'propD', 10);
创建部门表:
CREATE TABLE ##Department
(
id INT,
d_name VARCHAR(50)
)
INSERT INTO ##Department (id, d_name) VALUES
(9, 'dep9')
,(10, 'dep10')
,(11, 'dep11');
在这里,我可以按部门显示提供商和提案的数量(实际查询要复杂得多,因此我希望保留2个子请求):
但我无法显示这两个数字的计算结果:
select
id,
d_name,
nb_provider = (
SELECT COUNT(DISTINCT Id)
FROM ##Provider p
WHERE p.id_dep = dep.id
),
nb_proposal = (
SELECT COUNT(DISTINCT Id)
FROM ##Proposal pp
WHERE pp.id_dep = dep.id
),
calcul = (nb_provider * nb_proposal) --> DOESN'T WORK
from ##Department dep
WHERE dep.id = 10
我没有尝试太多,因为我不确定这是否可能。。。也许我应该使用UNION?我建议使用横向连接:
select
d.id,
d.d_name,
p.nb_provider,
pp.nb_proposal
(p.nb_provider * pp.nb_proposal) calcul
from ##department d
outer apply (
select count(distinct id) nb_provider
from ##provider p
where p.id_dep = d.id
) p
outer apply (
select count(distinct id) nb_proposal
from ##proposal pp
where pp.id_dep = d.id
) pp
where d.id = 10
计算列(
nb\u provider
和nb\u proposal
)在select
子句中不可用。您可以:(1)通过计算calcul
,重复子查询,(2)从执行聚合的查询中选择:选择。。。calcul=(nb_provider*nb_proposal)from(select…nb_provider=…,nb_proposal=…)作为TableAlias(ColumnAlias…)
,或(3)使用公共表表达式(CTE)执行聚合,然后从中计算结果。这是否回答了您的问题?