【发布时间】:2021-01-30 00:31:33
【问题描述】:
我正在尝试将我从唯一查询的 SELECT 语句中得到的两个数字相乘。我想获得提供者的数量和提案的数量(我所做的查询显示了这一点),并将两者相乘(我做不到)。
我做了一个非常简单的例子给你看(代码如下):DEMO ON FIDDLE
创建 2 个供应商,为 2 个部门工作:
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);
针对 2 个部门创建 4 个提案:
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
)
from ##Department dep
WHERE dep.id = 10
但我无法显示这两个数字的计算结果:
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 吗?
【问题讨论】:
-
计算的列(
nb_provider和nb_proposal)在select子句中不可用。您可以:(1) 使用calcul的计算重复子查询,(2) 从执行聚合的查询select:select ... calcul = (nb_provider * nb_proposal) from ( select ... nb_provider = ..., nb_proposal = ... ) as TableAlias( ColumnAlias, ... ),或 (3) 使用公用表表达式 (CTE) 执行聚合,然后从中计算结果。
标签: sql sql-server tsql where-clause lateral-join