求一条SQL语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一条SQL语句相关的知识,希望对你有一定的参考价值。

有张表: ID va
1 10
3 uyh
2 111
要求排列后是:
ID 1 2 3
va 10 111 uyh
那怎样才能实现后面的那个表呢?

参考技术A 这个是用动态SQL实现的
declare
v_sql varchar2(4000);
cursor c is select id from temp_006 order by id asc;
cursor d is select column_name from user_tab_cols where table_name like 'TEMP_006' order by column_id desc;
v_id varchar2(10);
v_col varchar2(50);
begin
v_sql:='select ';
open d;
fetch d into v_col;
v_sql:=v_sql||''''||v_col||''' as ';
fetch d into v_col;
v_sql:=v_sql||v_col;
close d;
open c;
loop
fetch c into v_id;
exit when c%notfound;
v_sql:=v_sql||',(select va from temp_006 where id ='||v_id||') as "'||v_id||'"';
end loop;
close c;
v_sql:=v_sql||' from dual';
dbms_output.put_line(v_sql);
end;
执行这个块生成一句SQL,执行下就能得出你要的结果.

ps:有些过程看起来很简单,但是程序实现却特别复杂,这个是由于关系数据库的底层结构所决定的,所以我们要尽量扬长避短,如果有其他方式可以简单实现的话(如excel的行列转换)就别用这种复杂的方法.
参考技术B 这属于交叉数据表的操作,就是行变列或是列变行都是这样,这种操作只能用存储过程来实现,不能用一句SQL来实现。
这样的问题我已经说了多次了,写程序的首先要注意逻辑清晰易读,有些逻辑即使能用一条sql实现,如果逻辑太复杂,还不如用存储过程效率高,不要惧怕存储过程,掌握了就方便了,要不老瘸腿。

补充:先用第一列内容生成一个临时标的列,然后对应把值写进去,最后返回临时表的值就可以了。
参考技术C 这个表有什么用吗?
就只能放两行数据。
参考技术D 设计到行列转换问题
你百度一下 行列换行吧
第5个回答  2010-11-13 select * from table order by ID asc,va asc;

sql select语句,如何查找最后一行的数据

如果数据表有自增ID列的的话,可运行下列语句获得:
select
*
from
tableName
where
id=
(select
max(id)
from
tablename);
如果没有则增ID列的话,那就要使用游标了或者利用应用程序端编程获取最后那行记录了。当然如果版本支持ROW_NUMBER()函数的也可以用它获取最后一行数据。
参考技术A 在sql中根本就没有你说的那种用法。。
如果你想取最后一行数据的话,得根据你的表结构和实际数据的情况进行编写sql语句。
如果你就想求一条完全能用的sql语句,基本上是不太可能的。。
参考技术B select
top
1
*
from
表名
order
by
用于排序的字段(一般是id)
desc
这样就可以降序排列,查询结果的第一条记录也就是表中的最后一条记录。
参考技术C "既然有Select
top
1
*
,那请问有没有
Select
button
1
*
或Select
last
1
*呢?"肯定不行的,呵呵,你就按上面两位说的,选择用一个降序排序就OK了
参考技术D SELECT
MIN(id)
FROM
table_name
ORDER
BY
Company
DESC
SELECT
Max(id)
FROM
table_name
这样都是最后一行

以上是关于求一条SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

求一条插入并返回的SQL语句

求一条SQL语句:修改一个字段由1自然增加到最后

求一条sql语句,按照成绩降序排序,并显示名次,如123

求一条关于字段名称取值的SQL语句?

求一SQL语句:如何查询最大的前3个值

求一sql语句使数据按 where in 括号内的数据顺序排列