我正在尝试创建一个包含大量子查询(4个子查询)的查询,但对于subquerys我需要获取查询的值,任何人都可以帮助我吗?这是查询:
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
我需要做的是,在subquerys中,使用该值进行INNER JOIN,子查询进行添加,但只使用value1的值,因为现在子查询会添加所有值在表中与“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
但显然它没有起作用,我也尝试过使用all1作为value1,但它说它不存在,有人有想法吗?
答案 0 :(得分:0)
我要去试一下...看起来你正试图通过_id
加入四个表,并根据子表的tab4
)值汇总一个总和。 / p>
在下面的例子中,我使用了三个表,但想法是一样的。如果这不符合您的需求,也许您可以重新调整此示例以明确定义您的要求:
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;