多值转换


CREATE TABLE EMP
       (EMPNO integer NOT NULL,
        ENAME VARCHAR(10),
        JOB VARCHAR(9),
        MGR integer,
        HIREDATE DATE,
        SAL integer,
        COMM integer,
        DEPTNO integer);

INSERT INTO EMP values (7369, 'SMITH',  'CLERK',     7902, '1980-12-17',  800,  NULL, 20);
INSERT INTO EMP values (7499, 'ALLEN',  'SALESMAN',  7698, '1981-2-20',   1600, 300,  30);
INSERT INTO EMP VALUES (7521, 'WARD',   'SALESMAN',  7698, '1981-2-22',   1250, 500,  30);
INSERT INTO EMP VALUES (7566, 'JONES',  'MANAGER',   7839, '1981-4-2',    2975, NULL, 20);
INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN',  7698, '1981-9-28',   1250, 1400, 30);
INSERT INTO EMP VALUES (7698, 'BLAKE',  'MANAGER',   7839, '1981-5-1',    2850, NULL, 30);
INSERT INTO EMP VALUES (7782, 'CLARK',  'MANAGER',   7839, '1981-6-9',    2450, NULL, 10);
INSERT INTO EMP VALUES (7788, 'SCOTT',  'ANALYST',   7566, '1982-12-9',   3000, NULL, 20);
INSERT INTO EMP VALUES (7839, 'KING',   'PRESIDENT', NULL, '1981-11-17',  5000, NULL, 10);
INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN',  7698, '1981-9-8',    1500,    0, 30);
INSERT INTO EMP VALUES (7876, 'ADAMS',  'CLERK',     7788, '1983-1-12',   1100, NULL, 20);
INSERT INTO EMP VALUES (7900, 'JAMES',  'CLERK',     7698, '1981-12-3',   950,  NULL, 30);
INSERT INTO EMP VALUES (7902, 'FORD',   'ANALYST',   7566, '1981-12-3',   3000, NULL, 20);
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK',     7782, '1982-1-23',   1300, NULL, 10);

--t100 是 1~100 的数值自增列
select empno, ename
from emp
where empno in (
select SUBSTRING(c,2, CHARINDEX(',',c,2)-2) as empno from (
select emps,pos,SUBSTRING(emps, pos,len(emps)) as c
from 
(
select ',' + '7369,7499,7521' + ',' as emps from t1 ) csv,
( select id as pos from t100) iter
where pos <= LEN(emps)) tb
where len(c) > 1
and substring(c,1,1) = ','
)


2020 WangYu.Art All Rights Reserved