1

我有一个非常复杂的表,如下所示:-

Snos 列 1 列 2 列 3 列 4 列 5 列 6
1 公元 AD1 C1 2011 P1 6435200
2 公元 AD1 C1 2010 P1 234
3 AD AD1 C1 2009 P1 6435
4 BD AD2 C2 2010 P2 198448333
5 CD AD3 C3 2011 P3 194414870

现在,我需要处理一个查询,该查询应该复制一行,其中假设 p2 值不适用于该特定年份或 2009 年或 2010 年或 2011 年的任何一个,并将最后一列的值设为零。

所以现在我的数据库应该看起来像 -

Snos 列 1 列 2 列 3 列 4 列 5 列 6
1 公元 AD1 C1 2011 P1 6435200
2 公元 AD1 C1 2010 P1 234
3 AD AD1 C1 2009 P1 6435
4 公元 AD1 C1 2011 P2 0
5 公元 AD1 C1 2010 P2 0
6 公元 AD1 C1 2009 P2 0
7 公元 AD1 C1 2011 P3 0
8 公元 AD1 C1 2010 P3 0
9 公元 AD1 C1 2009 P3 0
10 BD AD2 C2 2010 P2 198448333
11 BD AD2 C2 2009 P2 0
12 BD AD2 C2 2011 P2 0
13 BD AD2 C2 2010 P1 0
14 BD AD2 C2 2009 P1 0
15 BD AD2 C2 2011 P1 0
16 BD AD2 C2 2010 P3 0
17 BD AD2 C2 2009 P3 0
18 BD AD2 C2 2011 P3 0
19 CD AD3 C3 2011 P3 194414870
20 CD AD3 C3 2009 P3 0
21 CD AD3 C3 2010 P3 0
22 CD AD3 C3 2011 P1 0
23 CD AD3 C3 2009 P1 0
24 CD AD3 C3 2010 P1 0
25 CD AD3 C3 2011 P2 0
26 CD AD3 C3 2009 P2 0
27 CD AD3 C3 2010 P2 0

我尝试使用临时表

    CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE *Some Condition*;
    一些如果其他
    然后
    更新 tmptable_1 SET Column6 = 0;
    插入表 SELECT * FROM tmptable_1;
    如果存在 tmptable_1,则删除临时表;

但它不工作。谁能帮我。

4

3 回答 3

2

首先,我忽略了Snos专栏。这看起来像一个自动编号的标识列。排序不应该对这样的列产生影响。

这个想法是独立插入每组行(对于给定的年份)。例如,以下查询查找 2009 年所需的行。这些行(按大多数列分组时)没有 2009 年的值:

insert into t(Column1, Column2, Column3, Column4, Column5, Column6)
    select Column1, Column2, Column3, 2009, Column5, 0
    from table t
    group by Column1, Column2, Column3, Column5
    having sum(Column4 = 2009) = 0;

您可以在 2010 年和 2011 年重复此插入。

于 2013-08-12T10:52:24.187 回答
1

这似乎是一个好问题!

尝试这个:

select C.c1,
       C.c2,
       C.c3,
       A.c4,
       D.c5,
       case when B.c6 is null then 0 
            else B.c6 
       end as c6 
from (select '2011' as c4
      union all 
      select '2010' as c4
      union all 
      select '2009' as c4
      ) A
inner join 
      (select distinct c5 from tablename) D
inner join 
      (
        select distinct c1,c2,c3
        from tablename
      ) C
left outer join 
      tablename B
  on  A.c4 = B.c4
 and  D.c5 = B.c5
 and  C.c1 = B.c1
 and  C.c2 = B.c2
 and  C.c3 = B.c3
于 2013-08-12T13:42:35.250 回答
0

这是您可以使用的查询示例:

insert into tablename (Column1, Column2, Column3, Column4, Column5, Column6) 
select "BD","AD2","C2", column4,"P2","0" 
from tablename where 
column4 in (select distinct column4 from test) 
and column4 not in (select distinct column4 from test where column5 = "P2");
于 2013-08-12T10:54:43.543 回答