昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

Description of your first forum.

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子本公子 » 星期六, 2008年7月26日 11:33


源于昨天夜里的一个想法,需要写一个SQL语句来实现,但没有成功。
即:把表2中的一行数据,作为表1新增的一列显示出来。(行列的数目是对应的)

举例如下--------

表1内容:
 ENFIELD    CHNAME
  A          序号1
  B          序号2
  C          序号3
  D          序号4
  E          序号5
 ...         ...
 
------------

表2内容:
    A      B       C       D     E   ......  
   值1    值2     值3     值4   值5  ......

------------

要求SQL查询得到如下效果:把表2中的一行数据,作为表1新增的一列(VALUES)显示出来。

 ENFIELD    CHNAME      VALUES
  A          序号1       值1
  B          序号2       值2
  C          序号3       值3
  D          序号4       值4
  E          序号5       值5
 ...         ...         ...

----------------------

在此向各位请教。

希望最好用SQL_Server和 Oracle都能分别实现该功能。 多谢了!
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子加油+加油 » 星期六, 2008年7月26日 11:37


用存储过程实现.遍历列名和值比较,取出value
要用到sp_exec...
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子jieking » 星期六, 2008年7月26日 13:26


我也想学习!我之前是跟据T2来循环读取T1的的值的!
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子竹风 » 星期六, 2008年7月26日 16:11


我也来学习下,如果是对应的 就不用比较拉吧是吗??
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子equn » 星期六, 2008年7月26日 17:22


用游标实现!
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子jmh521 » 星期六, 2008年7月26日 22:12


我也想学习!
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子kaida » 星期六, 2008年7月26日 23:36


declare @s varchar(8000)
set @s='select *, (select case ENFIELD'
select @s=@s + ' when '''+ENFIELD+''' then '+ENFIELD from t1

set @s=@s+' end from t2) [values] from t1'

exec(@s)
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子power255 » 星期日, 2008年7月27日 01:37


表2建立一个视图
crater view as V2
select 'A' as ENFIELD,A from 表2
union all
select 'B' as ENFIELD,B from 表2
union all
...
再通过该视图与A表关联。
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子kaida » 星期日, 2008年7月27日 14:05


我给你的代码是测试通过的,你试了没有?为什么不给个回话?不理不睬会打击别人回答问题的积极性。
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子xstdljj » 星期日, 2008年7月27日 14:18


我觉得楼上2种方法都可行
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子本公子 » 星期日, 2008年7月27日 15:43


to kaida:
   我刚睡醒。
   测试初步通过。谢谢。
   我现正在加where条件,还没有通过呢。
   比如:
   ... where (ENFIELD='A' and VALUES='值1') or (ENFIELD='C' and VALUES='值3')  

   根据这个查询条件,能得到这样的结果:
   ------
   ENFIELD     CHNAME      VALUES
    A          序号1         值1
    C          序号3         值3
   -----如何拼写这样的SQL呢? 谢谢。

----------
我现在用的是SQL2000和Oracle9i。
我想问,在Oracle下,该如何拼写动态SQL呢??
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子kaida » 星期日, 2008年7月27日 16:46


加 where 条件:
declare @s varchar(8000)
set @s=';with t as (select *, (select case ENFIELD'
select @s=@s + ' when '''+ENFIELD+''' then '+ENFIELD from t1

set @s=@s+' end from t2) [values] from t1)'+
       ' select * from t where (ENFIELD=''A'' and [VALUES]=''值1'') or (ENFIELD=''C'' and [VALUES]=''值3'')'

exec(@s)

我没装 Oracle9i,无法在 Oracle9i 上测试。
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子本公子 » 星期日, 2008年7月27日 20:14


to kaida:
加条件这个写法,我在CSDN上也问你了,会出现一个问题,如下描述:
 set @s=';with t as (select *, (select case ENFIELD'

是在2005中用的吧? 在2000中运行提示:  ';' 附近有语法错误。

------
另外,在 Oracle中肯定不是这样拼写的SQL。
因为像declare @s varchar(8000)这样的写法,是SQL_Server中才有的。
------
另外,我注意到在SQL2005和Oracle11g中,有两个东东是非常有用的:pivot和unpivot。
可惜在低版本中是没有的。

因我目前的整个系统是在SQL2000/Oracle9i下的,所以我无法改换数据库。[:(]
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子kaida » 星期日, 2008年7月27日 20:54


是 2005.
你应该一开始就说明是 SQL2000。
SQL2000 要实现同样功能,可能要用临时表。你同意用临时表吗?
 
 
 

昨天夜里的一个想法,请教写一个SQL语句,帮忙实现一种效果。

帖子kaida » 星期一, 2008年7月28日 08:47


我在 CSDN 又给你一个答案,你再试试。