在子查询

时间:2015-04-23 19:30:35

标签: insert sql-server-2008-r2 subquery

我正在尝试创建一个包含大量子查询(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,但它说它不存在,有人有想法吗?

1 个答案:

答案 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;