我有一个非常复杂的表格,如下所示: -
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 :(得分: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年重复此插入。
答案 1 :(得分: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
答案 2 :(得分: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");