ID               COLUMN1         COLUMN2  COLUMN3          COLUMN4   COLUMN    VAL  BMC
1   1         3         4      2       BS       1   TABLE1
2   1         3         4      2       BM       2   TABLE1
3   1         3         4      2       BH       3   TABLE1
4   1         3         4      2       MC       4   TABLE1
5   1         3         4      2       JC       6   TABLE1
6   1         3         4      2       QC       7   TABLE1
7   1         3         4      2       SM       8   TABLE1
COLUMN1=1 字段代表第一个字段名称,对应VAL=1时的COLUMN列的值BS
COLUMN2=2 字段代表第一个字段名称,对应VAL=3时的COLUMN列的值BH
COLUMN3=4 字段代表第一个字段名称,对应VAL=4时的COLUMN列的值MC
COLUMN4=2 字段代表第一个字段名称,对应VAL=2时的COLUMN列的值BM
COLUMN1  COLUMN2 COLUMN3 COLUMN4   BMC 这几列值,每行是相同的。只有ID,COLUMN,VAL不同。
我想从上表组成一个SQL语句,语句是
SELECT BS,BH,MC,BM FROM TABLE1
看看有办法组成这个语句吗?

解决方案 »

  1.   

    没明白楼主的意思,为什么是SELECT BS,BH,MC,BM FROM TABLE1?jc,qc,sm是用来干吗的?你那结果是怎么来的
      

  2.   

    BS,BM,BH,MC,JC,QC都代表TABLE1表的字段名称,COLUMN1 COLUMN2 COLUMN3 COLUMN4代表我需要选4个字段,分别是VAL=1,3,4,2的字段,所以最后组成的SQL就是SELECT BS,BH,MC,BM FROM TABLE1
      

  3.   


    create table t(
    id int,
    column1 int,
    column2 int,
    column3 int,
    column4 int,
    COL  varchar2(20),
    val     int,
    bmc  varchar2(20)
    )
    insert into t values (1,1,3,4,2,'BS',1,'TABLE1');
    insert into t values (2,1,3,4,2,'BM',2,'TABLE1');
    insert into t values (3,1,3,4,2,'BH',3,'TABLE1');
    insert into t values (4,1,3,4,2,'MC',4,'TABLE1');
    insert into t values (5,1,3,4,2,'JC',5,'TABLE1');
    insert into t values (6,1,3,4,2,'QC',6,'TABLE1');
    insert into t values (7,1,3,4,2,'SM',7,'TABLE1');
    insert into t values (8,2,3,4,5,'CD',1,'TABLE2');
    insert into t values (9,2,3,4,5,'BH',2,'TABLE2');
    insert into t values (10,2,3,4,5,'CC',3,'TABLE2');
    insert into t values (11,2,3,4,5,'TH',4,'TABLE2');
    insert into t values (12,2,3,4,5,'DG',5,'TABLE2');
    COMMIT;
    SELECT 'SELECT '||
           MAX(DECODE(COLUMN1, VAL, COL))||','||
           MAX(DECODE(COLUMN2, VAL, COL))||','||
           MAX(DECODE(COLUMN3, VAL, COL))||','||
           MAX(DECODE(COLUMN4, VAL, COL))||' FROM '||BMC S
      FROM T GROUP BY BMC;S
    --------------------------------------------------------------------------------
    SELECT BS,BH,MC,BM FROM TABLE1
    SELECT BH,CC,TH,DG FROM TABLE2
      

  4.   


    SELECT ENAME, T.HIREDATE
      FROM EMP T
     WHERE 
       NOT EXISTS (SELECT 1 FROM EMP T1 WHERE T1.HIREDATE < T.HIREDATE)
        OR 
       NOT EXISTS (SELECT 1 FROM EMP T1 WHERE T1.HIREDATE > T.HIREDATE)