怎么oracle将列值,oracle列值相加
如何在oracle中进行列行转换
数据表示例:
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网站空间、网站托管维护、企业网站设计、涟源网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
假设要将name值作为行,course值作为列,转换后效果为:
对应的SQL如下:
方法1:使用表连接
SELECT DISTINCT a.name,
(SELECT score FROM grade b WHEREa.name=b.name AND b.course='语文') AS '语文',
(SELECT score FROM grade b WHEREa.name=b.name AND b.course='数学') AS '数学',
(SELECT score FROM grade b WHEREa.name=b.name AND b.course='英语') AS '英语'
FROM grade a
方法2:使用分组
SELECT name,
SUM(CASE course WHEN '语文' THEN score END) AS '语文',
SUM(CASE course WHEN '数学' THEN score END) AS '数学',
SUM(CASE course WHEN '英语' THEN score END) AS '英语'
FROM grade GROUP BY name
怎么样把从ORACLE数据库的一列值填到下拉框中,不要说道理,要写出代码啊。
以下示例,希望对你有帮助:
oraconn = new OracleConnection(PublicClass.oraconnection_str);
oraconn.Open();
string sqlstr1 = " SELECT ffvt.Flex_value_meaning , ffvt.Description "
+ " FROM applsys.fnd_flex_value_sets ffvs, applsys.fnd_flex_values ffv, applsys.fnd_flex_values_tl ffvt "
+ " WHERE ffvs.Flex_value_set_name = 'MS_CH_COMPANY' AND ffvs.Flex_value_set_id = ffv.Flex_value_set_id "
+ " AND ffv.Flex_value_id = ffvt.Flex_value_id AND ffvt.Language = 'ZHT' "
+ " ORDER BY ffvs.Flex_value_set_id, ffvt.FLEX_VALUE_MEANING ";
BindingSource bindingSource2 = new BindingSource();
try
{
OracleDataAdapter da = new OracleDataAdapter(sqlstr1, oraconn);
DataTable dt = new DataTable();
bindingSource2.DataSource = dt;
da.Fill(dt);
}
catch (OracleException ex)
{
MessageBox.Show("执行异常:" + ex.Message);
return;
}
this.cmbCompanycode.DataSource = bindingSource2;
this.cmbCompanycode.DisplayMember = "Flex_value_meaning";
this.cmbCompanycode.ValueMember = "Flex_value_meaning";
oraconn.Close();
如何把ORACLE数据表的列变成行
固定列数的行列转换如
student subject grade
---------------------------
student1 语文 80
student1 数学 70
student1 英语 60
student2 语文 90
student2 数学 80
student2 英语 100
转换为
语文 数学 英语
student1 80 70 60
student2 90 80 100
语句如下:
select student,sum(decode(subject,'语文', grade,null)) "语文",
sum(decode(subject,'数学', grade,null)) "数学",
sum(decode(subject,'英语', grade,null)) "英语"
from table
group by student
2、不定列行列转换如
c1 c2
--------------
1 我
1 是
1 谁
2 知
2 道
3 不
......
转换为
1 我是谁
2 知道
3 不
这一类型的转换必须借助于PL/SQL来完成,这里给一个例子
CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
RETURN VARCHAR2
IS
--用于返回值
Col_c2 VARCHAR2(4000);
BEGIN
FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
Col_c2 := Col_c2||cur.c2;
END LOOP;
Col_c2 := rtrim(Col_c2,1);
RETURN Col_c2;
Oracle: 如何将一行某列的值与另一行某列的值比较?
select a.*
from table_name a
where not exists (select 1 from table_name b where a.head=b.name)
oracle语句中如何把一列的值合并为一个值,用逗号隔开?
所有版本的oracle都可以使用wm_concat()函数 。例:select wm_concat(name) as name from user;
但如果是oracle11g,使用listagg() within group()函数 。例:select listagg(name, ‘,’) within group( order by name) as name from user;
使用wm_Concat:
使用ListAgg:
结果:
如何批量修改oracle数据库中某一个表中的某一列数据?
最好的方法是批量修改,即每次修改5000条(一次修改不要超过一万条,否则影响性能). 虽然在11g中,我们也可以选择使用merge命令,但你的这种情况最好先修改一部分然后看看影响,毕竟在生产环境作这样的操作风险很大。如果是误操作,最好还是请DBA来恢复,虽然这样做会被挨骂,但总比错上加错,最后连挨骂的机会都没有要好得多。如果对这些修改真的有信心,而只是从性能考虑,那可以用下面的方法(pk_col 是表的主键
1、构建临时表进行主键关联更新
需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个条件的记录。
做法:一般业务会将条件通过excel表格提供给开发,那么开发首先需要将这个excel表格的内容插入到临时表T2中,考虑到a,b都不是主键,那么需要将a,b转化成主键后再插入到T2表中,T2表中还可以保存更新前的数据,方便做数据回滚,T2表中有数据后,就可以执行下面脚本进行更新操作:
ps:c,d是需要更新的操作,e,f是条件。必须强调的是id必须是主键
1、构建临时表进行主键关联更新
需求:T1表有千万级别的数据量,需要更新这个表的字段a,b满足2个条件的记录。
做法:一般业务会将条件通过excel表格提供给开发,那么开发首先需要将这个excel表格的内容插入到临时表T2中,考虑到a,b都不是主键,那么需要将a,b转化成主键后再插入到T2表中,T2表中还可以保存更新前的数据,方便做数据回滚,T2表中有数据后,就可以执行下面脚本进行更新操作:
ps:c,d是需要更新的操作,e,f是条件。必须强调的是id必须是主键
当前文章:怎么oracle将列值,oracle列值相加
文章网址:http://azwzsj.com/article/hopeje.html