在子查询中使用查询的值
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;
我正在尝试创建一个包含很多子查询(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;