sql - 将一行的不同字段的值按一定顺序插入到另一个表的一列中
问题描述
当我将表 T_EMP_MASTER 中的字段插入临时表时,它会按照 emp_id,emp_id2,emp_id3 的值顺序出现在 #temp_empdet 中。我希望按照插入顺序插入 emp_id,emp_id2,emp_id3 字段,例如
1. emp_id
2. emp_id2
3. emp_id3
我怎样才能在这里做同样的事情,使用与联合相同的插入或使用其他任何东西?
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
解决方案
如果要保证插入顺序,请使用三个单独的语句:
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);
推荐阅读
- javascript - 表格详细信息的道具
- r - 为什么布冯的针法估计 pi 没有产生期望值?
- ruby-on-rails - 以不同的方式将红宝石中的数字向上或向下舍入到最接近的 10 / 100 / 1000
- php - 如何在codeigniter中用一列检查两个值
- android - 当 launchMode 是单任务时,从 MainActivity 中的另一个应用程序接收 action_send 的问题
- c# - 从对象的 Json 字符串中以 Xamarin 形式显示新闻文章列表
- mysql - 通过数据透视表连接两个表并在mysql中检索特定结果
- testing - 测试“-timeout 0”未反映在执行中
- angular - PrimeNg 条形图如何显示 y 轴的标签
- interface - 如何在具有 SV 接口的块上使用 generate