在子查询中使用查询的值

Use a value of a query in a subquery

我正在尝试创建一个包含很多子查询(4 个子查询)的查询,但是对于我需要获取查询值的子查询,有人可以帮助我吗?这是查询:

SELECT DISTINCT tab1.value1,
ISNULL((SELECT SUM(tab2.quantity) FROM tab2 INNER JOIN tab3 ON tab2.id_tab2 = tab3.id_tab2 INNER JOIN tab4 ON tab3.id_tab3 = tab4.id_tab3 WHERE tab4.value = "value1"), 0) AS v1,
ISNULL((SELECT SUM(tab2.quantity) FROM tab2 INNER JOIN tab3 ON tab2.id_tab2 = tab3.id_tab2 INNER JOIN tab4 ON tab3.id_tab3 = tab4.id_tab3 WHERE tab4.value = "value2"), 0) AS v2

我需要做的是,在子查询中,使用该值 1 进行内部连接,子查询进行添加,但仅使用值 1 的值,因为现在子查询进行所有的添加位于 table 中的值与 "value1" 或 "value2" 相等,我尝试进行如下子查询:

ISNULL((SELECT SUM(tab2.quantity) FROM tab2 INNER JOIN tab3 ON tab2.id_tab2 = tab3.id_tab2 INNER JOIN tab4 ON tab3.id_tab3 = tab4.id_tab3 INNER JOIN tab5 ON tab2.id_tab5 = tab5.id_tab5 INNER JOIN tab1 ON tab5.id_tab1 = tab1.id_tab1 INNER JOIN tab1 ON tab1.value1 = tab1.value1 WHERE tab4.value = "value1"), 0) AS v1

但显然它没有起作用,我也尝试过为 value1 使用别名,但它说它不存在,有人知道吗?

我要试一试...看起来您正在尝试通过 _id 加入四个 table 并根据 child 汇总总和table 的 (tab4) 值。

在下面的例子中我用了三个table,但是思路是一样的。如果这不能满足您的需求,也许您可​​以重新调整此示例的用途以明确定义您的需求:

declare @tab1 table (i int primary key, value varchar(10));
insert into @tab1
    select 1, 'one' union all select 2, 'two'

declare @tab2 table (i int primary key, quantity varchar(10));
insert into @tab2
    select 1, 10 union all
    select 2, 20

declare @tab3 table (i int primary key, value varchar(10));
insert into @tab3
    select 1, 'value1' union all
    select 2, 'value2'


select  t1.value,
        sum(case when t3.value = 'value1' then t2.quantity else 0 end),
        sum(case when t3.value = 'value2' then t2.quantity else 0 end)
from    @tab1 t1
join    @tab2 t2 on t1.i = t2.i
join    @tab3 t3 on t2.i = t3.i
group
by      t1.value;