2013-08-12 51 views
1

更新它的价值我有一个非常复杂的表格是这样的: -插入重复行通过在MySQL

 
Snos Column1 Column2 Column3 Column4 Column5 Column6 
1  AD  AD1  C1  2011 P1  6435200 
2  AD  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 Column1 Column2 Column3 Column4 Column5 Column6 
1  AD  AD1  C1  2011 P1  6435200 
2  AD  AD1  C1  2010 P1  234 
3  AD  AD1  C1  2009 P1  6435 
4  AD  AD1  C1  2011 P2  0 
5  AD  AD1  C1  2010 P2  0 
6  AD  AD1  C1  2009 P2  0 
7  AD  AD1  C1  2011 P3  0 
8  AD  AD1  C1  2010 P3  0 
9  AD  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*; 
    Some If Else 
    Then 
    UPDATE tmptable_1 SET Column6 = 0; 
    INSERT INTO table SELECT * FROM tmptable_1; 
    DROP TEMPORARY TABLE IF EXISTS tmptable_1; 

,但它不工作。谁能帮我。

回答

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"); 
+0

请参阅最新的问题.. – Rockr

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年

+0

这是伟大的,但问题是我不知道为哪一年的数据是当前和今后哪一年不是。而2009年并不是它的一列价值。我们需要进行检查,如果该值在2009年或2010年或2011年的任何一年中都不存在,请将第6列的重复行插入为零 – Rockr

+0

@RockR。 。 。没事儿。此查询确定哪些行缺少2009年的值;然后插入它们。 –

+0

它正在给我下面的错误,当我正在运行此查询 - 插入数据(c1,c2,c3,c4,c5,c6) 从数据选择c1,c2,c3,2009,c5,0 group by c1 ,c2,c3,c4,c5,其中sum(c4 = 2009)= 0; **#1062 - 航空航天与国防 - 航空航天与国防 - EADS-2009-关键'Sector'的T后盈利** – Rockr

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