替换第二列记录中的第一列记录

时间:2016-02-12 14:15:11

标签: oracle plsql

我在Oracle中有两列不同的数据。例如:我的第一列名称为" FROM"第二列是" TO"。

From    TO
Bhx      ACE
Ace      BHX
LTN      PRA
PRA      LTN
lba      agp
agp      lba
man      ssh
ssh      man
lgw       tfs
tfs       lgw

我想要什么:如果" TO"列是" BHX,LTN,LBA,LGW,MAN"然后列"来自"将列"替换为"记录......在Oracle查询中是否有任何方法。

输出结果:

   Bhx      ACE
   bhx      BHX
   LTN      PRA
   ltn      LTN
   lba      agp
   lba      lba
   man      ssh
   man      man
   lgw      tfs
   lgw      lgw

3 个答案:

答案 0 :(得分:1)

只需使用相反的别名选择它们:

CREATE TABLE [dbo].[Results](
    [Result_AN] [int] IDENTITY(1,1) NOT NULL,
    [Detail_AN] [int] NULL,
    [Drug] [nvarchar](10) NULL,
    [LDrug] [nvarchar](10) NULL,
    [Lab_Result] [nvarchar](10) NULL,
    [MRO_Result] [nvarchar](10) NULL,
    [Confirm] [nvarchar](6) NULL,
    [CutOff] [nvarchar](6) NULL,
    [Quant] [nvarchar](10) NULL,
    [Screen] [nvarchar](6) NULL,
    [Unit] [nvarchar](6) NULL,
    [Deleted] [bit] NULL,
    [Scrn_Result] [nvarchar](10) NULL,
    [SSMA_TimeStamp] [timestamp] NOT NULL,
 CONSTRAINT [Results$PrimaryKey] PRIMARY KEY CLUSTERED 
(
    [Result_AN] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

BTW - “from”是SQL中的保留字。虽然可以解决这个问题(例如,通过使用引号),但对于列的名称来说,这是一个糟糕的选择,你应该找到一个不同的名称。

答案 1 :(得分:0)

SELECT "From" ,case when "TO" in ('BHX', 'LTN' , 'LBA', 'LGW', 'MAN') then "From" else "To" end "To"
带有Case

IN表达式允许您检查TO列的不同值,如果它们相同,则使用From列,如果不是,则使用To列。

答案 2 :(得分:0)

UPDATE TABLENAME
  SET From =To,
  SET To = From
   WHERE TO IN ('BHX', 'LTN' , 'LBA', 'LGW', 'MAN')