首页 > 解决方案 > 如何使用 Insert Into 将一个字段一分为二?

问题描述

我正在尝试使用 Insert Into 将一个字段拆分为两个字段。这是我的代码。

INSERT INTO Pricing (ID_GLOBAL, 
    PRICING_SOURCE,
    PX_BID,
    PX_ASK,
    PX_HIGH,
    PX_LOW,
    PX_OPEN,
    CASE WHEN W.id_cd = 'ISN' THEN ID_ISN = W.id_number
         ELSE ID_SED = W.id_number 
         END)
Select C.asset_id,  
    C.price_source, 
    C.bid_price, 
    C.ask_price, 
    C.high, 
    C.low, 
    C.open_price, 
    W.id_cd, 
    W.id_number
From RRS As C
INNER JOIN ERS As W
ON C.asset_id = W.asset_id

在我把 CASE 放在那里之前,一切都很好。现在,我收到此错误:

Incorrect syntax near 'CASE'.

标签: sqlsql-server

解决方案


无法创建要插入的列的条件列表。您已经指定了所有可能具有值的列,然后有条件地填充它们。因此,您需要在 SELECT 语句中使用两个 CASE 语句来适当地填充这两个列。

尝试以下操作(注意:我实际上并没有运行它,所以如果有任何小的语法错误,请告诉我)。

INSERT INTO Pricing (ID_GLOBAL, 
    PRICING_SOURCE,
    PX_BID,
    PX_ASK,
    PX_HIGH,
    PX_LOW,
    PX_OPEN,
    ID_ISN,
    ID_SED)
Select C.asset_id,  
    C.price_source, 
    C.bid_price, 
    C.ask_price, 
    C.high, 
    C.low, 
    C.open_price, 
    W.id_cd, 
    CASE WHEN W.id_cd = 'ISN' THEN W.id_number ELSE NULL END,
    CASE WHEN W.id_cd != 'ISN' THEN W.id_number ELSE NULL END
From RRS As C
INNER JOIN ERS As W
ON C.asset_id = W.asset_id

推荐阅读