我有一个存储员工信息的表(EmpInfo)。以下是字段:
EMPLID - varchar(11) (PK)
名称- varchar(50)
POSITION_NBR - varchar(8)
CREPORTS5 - char(8)
CREPORTS6 - char(8)
CREPORTS7 - char(8)
CREPORTS字段引用命令链中的POSITION_NBR字段。
我正在尝试编写一个SQL查询,在这里我可以返回CREPORTS的名称,而不是POSITION_NBR
等级结构:
杰克琼斯-首席执行官
副校长约翰史密斯-经理
.Sarah=‘Sarah 2’>/.Sarah=‘Sarah 2’>.Sarah=‘Sarah 2’>.
(B)工业,工业,工业
.=‘2’>
--------------------------------------------------------------------------------
| EMPLID | NAME | POSITION_NBR | CREPORTS5 | CREPORTS6 | CREPORTS7 |
--------------------------------------------------------------------------------
| 1234 | John Smith | 11111 | 22222 | NULL | NULL |
--------------------------------------------------------------------------------
| 2345 | Jack Jones | 22222 | NULL | NULL | NULL |
--------------------------------------------------------------------------------
| 3456 | Sarah Test | 33333 | 22222 | 11111 | NULL |
--------------------------------------------------------------------------------
| 4567 | Suzy Blerg | 44444 | 22222 | 11111 | 33333 |
--------------------------------------------------------------------------------
| 5678 | Mike Martin | 55555 | 22222 | 11111 | 33333 |
--------------------------------------------------------------------------------我不怎么喜欢SQL,所以我的第一次尝试是这样的:
SELECT EmpInfo.EMPLID
EmpInfo.CREPORTS5,
CAST
((SELECT TOP (1) NAME
FROM EmpInfo AS subInfo
WHERE (subInfo.POSITION_NBR = EmpInfo.CREPORTS5)) AS varchar(50)) AS CREPORTS5_NAME
FROM EmpInfo此查询工作正常,但在对300 k记录运行时很慢。
发布于 2011-10-24 19:17:01
不确定,但我认为这是您想要的;只需多次对表进行自我连接:
DECLARE @t TABLE
(
EMPLID VARCHAR(11)
, NAME VARCHAR(50)
, POSITION_NBR VARCHAR(8)
, CREPORTS5 CHAR(8)
, CREPORTS6 CHAR(8)
, CREPORTS7 CHAR(8)
)
INSERT INTO @t
( EMPLID, NAME, POSITION_NBR, CREPORTS5, CREPORTS6, CREPORTS7 )
VALUES ( '1234', 'John Smith', '11111', '22222', NULL, NULL ),
( '2345', 'Jack Jones', '22222', NULL, NULL, NULL ),
( '3456', 'Sarah Test', '33333', '22222', '11111', NULL ) ,
( '4567', 'Suzy Blerg', '44444', '22222', '11111', '33333' ),
( '5678', 'Mike Martin', '55555', '22222', '11111', '33333' )
SELECT t.EMPLID
, t.Name
, t2.NAME AS CDR5Name
, t3.NAME AS CDR6Name
, t4.NAME AS CDR7Name
FROM @t t
LEFT JOIN @t t2 ON t.CREPORTS5 = t2.POSITION_NBR
LEFT JOIN @t t3 ON t.CREPORTS6 = t3.POSITION_NBR
LEFT JOIN @t t4 ON t.CREPORTS7 = t4.POSITION_NBR此外,您可能希望更改数据类型以匹配(对数字数据使用数字类型等)。如果您能够发布一个示例脚本,而不是一个描述,那就更好了:)
https://stackoverflow.com/questions/7880513
复制相似问题