各位大哥大姐 我有个sql不知道怎么写了 琢磨了半天也没没整出来,现在跟大哥说说,给提供个解决办法我有两个表 一个title表 一个value表title表字段如下:
datacode varchar(30), -主键
row int, 记录标题的序号
titleval varchar(30) -标题的名字
value表字段如下:
datacode varchar(30) -主键
row int -主键 行值
col int -主键 列值
datavalue --标题对应的数值
比如有如下数据:title表:datacode row titleval
------------------------------
aaa 1 列1
aaa 2 列2
aaa 3 列3 bbb 1 列3
bbb 2 列1
bbb 3 列2
value表:datacode row col value
-------------------------------
aaa 1 1 1
aaa 1 2 3
aaa 1 3 5
aaa 2 1 2
aaa 2 2 4
aaa 2 3 6 bbb 1 1 5
bbb 1 2 6
bbb 1 3 3
bbb 2 1 2
bbb 2 2 3
bbb 2 3 4
把这两个表转成自己理解的矩阵 就是如下情况:
datacode 列1 列2 列3 datacode 列3 列1 列2
------------------------- -------------------------
aaa 1 4 6 bbb 5 6 3
aaa 2 3 5 bbb 2 3 4
现在需求是 把datacode =bbb 的数据做为参照样本 对 datacode=aaa的数据 进行参照性删除
生成新的datacode分别插入到title表和value表
参照性删除的要求是:
页面可以选择 参照数据 bbb 的 列 比如 选择了bbb “列3” 这个标题
则 根据 bbb “列3” 的 5 在 aaa 的 “列3”中查找 如果存在 则删除 aaa 的整行数据,
然后 比较 bbb “列3”的2 在 aaa 的 “列3”中查找 如果存在 则删除 aaa 的整行数据,删除后的 aaa数据如下:datacode 列1 列2 列3
-------------------------
aaa 1 3 6
页面可以选择 参照数据 bbb 的 列 比如 选择了bbb “列3”和“列2” 这两个标题 删除后的 aaa数据如下:datacode 列1 列2 列3
-------------------------
aaa 1 3 6 请教大侠们 这个sql怎么写 实在是整不出来了。。
datacode varchar(30), -主键
row int, 记录标题的序号
titleval varchar(30) -标题的名字
value表字段如下:
datacode varchar(30) -主键
row int -主键 行值
col int -主键 列值
datavalue --标题对应的数值
比如有如下数据:title表:datacode row titleval
------------------------------
aaa 1 列1
aaa 2 列2
aaa 3 列3 bbb 1 列3
bbb 2 列1
bbb 3 列2
value表:datacode row col value
-------------------------------
aaa 1 1 1
aaa 1 2 3
aaa 1 3 5
aaa 2 1 2
aaa 2 2 4
aaa 2 3 6 bbb 1 1 5
bbb 1 2 6
bbb 1 3 3
bbb 2 1 2
bbb 2 2 3
bbb 2 3 4
把这两个表转成自己理解的矩阵 就是如下情况:
datacode 列1 列2 列3 datacode 列3 列1 列2
------------------------- -------------------------
aaa 1 4 6 bbb 5 6 3
aaa 2 3 5 bbb 2 3 4
现在需求是 把datacode =bbb 的数据做为参照样本 对 datacode=aaa的数据 进行参照性删除
生成新的datacode分别插入到title表和value表
参照性删除的要求是:
页面可以选择 参照数据 bbb 的 列 比如 选择了bbb “列3” 这个标题
则 根据 bbb “列3” 的 5 在 aaa 的 “列3”中查找 如果存在 则删除 aaa 的整行数据,
然后 比较 bbb “列3”的2 在 aaa 的 “列3”中查找 如果存在 则删除 aaa 的整行数据,删除后的 aaa数据如下:datacode 列1 列2 列3
-------------------------
aaa 1 3 6
页面可以选择 参照数据 bbb 的 列 比如 选择了bbb “列3”和“列2” 这两个标题 删除后的 aaa数据如下:datacode 列1 列2 列3
-------------------------
aaa 1 3 6 请教大侠们 这个sql怎么写 实在是整不出来了。。
解决方案 »
- 在ubuntu下安装了oracle11.2g,可是怎么也进不去,求解。
- 求一存储过程 请大侠帮忙!!!!!
- 问一个SQL语句的问题
- 向表中插入数据提示表或视图不存在
- linux下安装Oracle 1521端口占用问题,求解!!!
- ORACLE安装完毕还要配置环境变量?
- orapwd和alter user SYS identified by "123"修改密码有何不同
- 另一个问题: 请问哪里有Oracle中Sql语句的使用方法介绍啊?
- 请问如何创建一个oracle instance?
- 这个触发器怎么写?在线等待
- oracle 触发器复制数据
- 调用BI的Webservice的executeSQLQuery时,产生错误 Unresolved table
可以提供建表语句和相关的INSERT语句么?这样子别人能够更容易帮助你. 或者with语句也可以
(
DataCode VARCHAR(25) not null,
Row INTEGER not null,
TitleVal VARCHAR(60),
TitleType CHAR(1),
constraint P_Key_1 primary key ( DataCode , Row )
)
in TBS1
index in TBS_IDX;create table MM_DATAVALUE
(
DataCode VARCHAR(25) not null,
Col INTEGER not null,
Row INTEGER not null,
DataVal VARCHAR(60),
constraint P_Key_1 primary key ( DataCode , Col , Row )
)
in TBS1
index in TBS_IDX;
你需要一条SQL搞定呢?还是需要PL/SQL搞定呢? 为什么必须要转行列转换呢?
一个往title表插
一个往value表插
不是必须用行专列 ,只要能实现就好了。,呵呵呵
SELECT 'AAA' AS DATACODE,1 AS ROWW,'列1' AS TITLEVAL FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,2 AS ROWW,'列2' AS TITLEVAL FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,3 AS ROWW,'列3' AS TITLEVAL FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,1 AS ROWW,'列3' AS TITLEVAL FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,2 AS ROWW,'列1' AS TITLEVAL FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,3 AS ROWW,'列2' AS TITLEVAL FROM DUAL
)
SELECT * FROM TITLE;
WITH VALUE AS(
SELECT 'AAA' AS DATACODE,1 AS ROWW,1 AS COL,1 AS VALUE FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,1 AS ROWW,2 AS COL,3 AS VALUE FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,1 AS ROWW,3 AS COL,5 AS VALUE FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,2 AS ROWW,1 AS COL,2 AS VALUE FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,2 AS ROWW,2 AS COL,4 AS VALUE FROM DUAL UNION ALL
SELECT 'AAA' AS DATACODE,2 AS ROWW,3 AS COL,6 AS VALUE FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,1 AS ROWW,1 AS COL,5 AS VALUE FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,1 AS ROWW,2 AS COL,6 AS VALUE FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,1 AS ROWW,3 AS COL,3 AS VALUE FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,2 AS ROWW,1 AS COL,2 AS VALUE FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,2 AS ROWW,2 AS COL,3 AS VALUE FROM DUAL UNION ALL
SELECT 'BBB' AS DATACODE,2 AS ROWW,3 AS COL,4 AS VALUE FROM DUAL
)
SELECT * FROM VALUE;
上面是两张你的表的模拟数据,把你希望得到的结果和操作步骤详细的再说一下吧,比如,做什么操作之后,期望的数据是什么样子的.
比如:
现在有两个矩阵 一个是参照的数据 另个是要进行对其参数的数据
标题对应在title表中
标题对应的值在 value表中
现在在页面上我有个选项 就是可以选择这个参数数据的标题(title表中的titlevalue字段)还拿上面的数据来说 : 要进行删除的 --xxx 参照的数据--yyy
datacode 列1 列2 列3 datacode 列3 列1 列2
------------------------- -------------------------
aaa 1 4 6 bbb 5 6 3
aaa 2 3 5 bbb 2 3 4
1.我选择了要参照的数据(yyy)的 列2 这列 那么列2中 有 3和4
拿 3比较 要进行删除的(xxx)的 列2 xxx的列2 也有3 那么 删除xxx的 第2行数据然后yyy的列2中的4 在 xxx的列2中也存在 那么 xxx的 第一行数据要删除进行完上述操作后 等于 没有数据需要插入到title和value两个表了2.我选择了要参照的数据(yyy)的 列2和列3 这两列 在 yyy中 列2中的3 和列3中的 5属于同一行数据 他们和xxx中的列2和列3 的值相等 那么删除xxx中的这一整行数据 只保留xxx中的第一行数据 ,把保留的xxx的第一行数据 生成新的datacode 然后把相应的title表字段和value表字段 依据xxx的title字段和value字段 插入到title表和value表以上两点不是对xxx表进行删除 是把比较后得到的数据 再插入到title和value表 datacode生成个新的
现在有两个矩阵 一个是参照的数据 另个是要进行对其参数的数据
标题对应在title表中
标题对应的值在 value表中
现在在页面上我有个选项 就是可以选择这个参数数据的标题(title表中的titlevalue字段)还拿上面的数据来说 : 要进行删除的 --xxx 参照的数据--yyy
datacode 列1 列2 列3 datacode 列3 列1 列2
------------------------- -------------------------
aaa 1 4 6 bbb 5 6 3
aaa 2 3 5 bbb 2 3 4
1.我选择了要参照的数据(yyy)的 列2 这列 那么列2中 有 3和4
拿 3比较 要进行删除的(xxx)的 列2 xxx的列2 也有3 那么 删除xxx的 第2行数据然后yyy的列2中的4 在 xxx的列2中也存在 那么 xxx的 第一行数据要删除进行完上述操作后 等于 没有数据需要插入到title和value两个表了2.我选择了要参照的数据(yyy)的 列2和列3 这两列 在 yyy中 列2中的3 和列3中的 5属于同一行数据 他们和xxx中的列2和列3 的值相等 那么删除xxx中的这一整行数据 只保留xxx中的第一行数据 ,把保留的xxx的第一行数据 生成新的datacode 然后把相应的title表字段和value表字段 依据xxx的title字段和value字段 插入到title表和value表以上两点不是对xxx表进行删除 是把比较后得到的数据 再插入到title和value表 datacode生成个新的拿参照数据(yyy) 比较 (xxx) 根据上面规则 生成 zzz 新数据到 title表和value表
datacode varchar(30), -主键
row int, 记录标题的序号 --这个应该是col吧
titleval varchar(30) -标题的名字
CREATE GLOBAL TEMPORARY TABLE MM_DATATITLE
(
DataCode VARCHAR(25) not null,
Roww INTEGER not null,
TitleVal VARCHAR(60),
TitleType CHAR(1),
constraint P_Key_1 primary key ( DataCode , Roww )
)on commit delete rows;
CREATE GLOBAL TEMPORARY table MM_DATAVALUE
(
DataCode VARCHAR(25) not null,
Col INTEGER not null,
Roww INTEGER not null,
DataVal VARCHAR(60),
constraint P_Key_2 primary key ( DataCode , Col , Roww )
)on commit delete rows;--insert into data
insert into MM_DATATITLE(DataCode,Roww,Titleval)values('aaa',1,'列1');
insert into MM_DATATITLE(DataCode,Roww,Titleval)values('aaa',2,'列2');
insert into MM_DATATITLE(DataCode,Roww,Titleval)values('aaa',3,'列3');
insert into MM_DATATITLE(DataCode,Roww,Titleval)values('bbb',1,'列3');
insert into MM_DATATITLE(DataCode,Roww,Titleval)values('bbb',2,'列2');
insert into MM_DATATITLE(DataCode,Roww,Titleval)values('bbb',3,'列1');
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('aaa',1,1,1);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('aaa',1,2,3);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('aaa',1,3,5);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('aaa',2,1,2);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('aaa',2,2,4);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('aaa',2,3,6);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('bbb',1,1,5);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('bbb',1,2,6);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('bbb',1,3,3);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('bbb',2,1,2);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('bbb',2,2,3);
insert into MM_DATAVALUE(DataCode,Roww,Col,dataval)values('bbb',2,3,4);--show datecode,row number,value
select * from MM_DATAVALUE;
select v.datacode,v.roww
,sum(decode(v.col,1,v.dataval,0)) "列1"
,sum(decode(v.col,2,v.dataval,0)) "列2"
,sum(decode(v.col,3,v.dataval,0)) "列3"
from MM_DATAVALUE v
group by v.datacode,v.roww
order by v.datacode,v.roww;--show same data
--'aaa'(select col 2) & 'bbb'(select col 2) 交集
select *
from MM_DATAVALUE a, MM_DATAVALUE b
where a.datacode='aaa' and a.col=2
and b.datacode='bbb' and b.col=2
and a.dataval=b.dataval;
-- datacode 'aaa' - datecode 'bbb' 差集
-- a - b = a - ( a & b )
select * from MM_DATAVALUE c
where c.roww not in(
select a.roww
from MM_DATAVALUE a, MM_DATAVALUE b
where a.datacode='aaa' and a.col=2
and b.datacode='bbb' and b.col=2
and a.dataval=b.dataval
)and datacode='aaa'