将某行的不同字段的值按特定顺序插入另一张表的一列中

时间:2019-12-08 13:38:01

标签: sql tsql

当我将表T_EMP_MASTER中的字段插入temp表时,它按照emp_id,emp_id2,emp_id3的值顺序显示在#temp_empdet中。 我希望按照插入顺序插入emp_id,emp_id2,emp_id3字段,例如

1. emp_id   
2. emp_id2   
3. emp_id3    

在同一位置,如何用union插入或使用其他任何方式,我该怎么做?

 CREATE TABLE #TEMP_EMPDET
 (SN INT,EMP_ID INT)

 INSERT INTO #TEMP_EMPDET
 SELECT EMP_ID FROM T_EMP_MASTER WHERE CODE = @CODE
 UNION
 SELECT  EMP_ID2 FROM T_EMP_MASTER WHERE CODE = @CODE
 UNION
 SELECT  EMP_ID3 FROM T_EMP_MASTER WHERE CODE = @CODE

1 个答案:

答案 0 :(得分:0)

如果要保证插入顺序,请使用三个单独的语句:

INSERT INTO #TEMP_EMPDET (EMP_ID)
    SELECT EMP_ID FROM T_EMP_MASTER WHERE CODE = @CODE;

INSERT INTO #TEMP_EMPDET (EMP_ID)
    SELECT  EMP_ID2 FROM T_EMP_MASTER WHERE CODE = @CODE;

INSERT INTO #TEMP_EMPDET (EMP_ID)
    SELECT  EMP_ID3 FROM T_EMP_MASTER WHERE CODE = @CODE;

因为SQL表表示无序集,所以您只会在“身份”列或EMP_ID是集群键的情况下看到“排序”。

CREATE TABLE #TEMP_EMPDET (
    EMPDET_ID INT IDENTITY PRIMARY KEY,
    SN INT,
    EMP_ID INT
);

由于UNION,您的代码未按顺序插入值。这样就消除了重复,并重新排列了数据。如果您需要该功能,事情会变得更加复杂。我想我会推荐:

INSERT INTO #TEMP_EMPDET
    SELECT v.EMP_ID
    FROM T_EMP_MASTER EM CROSS APPLY
         (VALUES (1, EMP_ID), (2, EMP_ID2), (3, EMP_ID3)
         ) V(WHICH, EMP_ID)
    WHERE CODE = @CODE
    GROUP BY v.EMP_ID
    ORDER BY MIN(WHICH);