ID DepID Status
------------------
000 54 0
000 12 1
141 14 0
141 56 1
000 12 0
000 89 1
我上面的表格中有depID
。以下是我需要的输出:
ID DepOld DepNew
-------------------
000 54 12
141 14 56
000 12 89
状态0表示旧,1表示新。我如何获得上述输出,考虑它在一个表中?
我不能使用IN
子句。
我尝试了以下
SELECT
ID,
Max(CASE
WHEN Status = 0 THEN DepID
END) DepOld,
Max(CASE
WHEN Status = 1 THEN DepID
END) DepNew
FROM
tablename
GROUP BY
ID
但这是我得到的输出
Id DepOld DepNew
--------------------
000 54 54
000 12 NULL
141 14 14
141 56 Null
如果我通过depID = 54那么这个输出就是我想要的
ID DepOld DepNew
000 54 12
答案 0 :(得分:1)
您可以使用条件聚合:
select id,
max(case when status = 0 then DepID end) as DepOld,
max(case when status = 1 then DepID end) as DepNew
from table t
group by id;
答案 1 :(得分:0)
使用Case statement
和Max aggragate
即可获得结果。
CREATE TABLE #fast
(
ID VARCHAR(100),
DepID INT,
Status INT
)
INSERT INTO #fast
VALUES ( '000',54,0),
('000',12,1),
('141',14,0),
('141',56,1),
('000',12,0),
('000',89,1)
SELECT ID,
Max(CASE
WHEN Status = 0 THEN DepID
END) DepOld,
Max(CASE
WHEN Status = 1 THEN DepID
END) DepNew
FROM tablename
GROUP BY ID
答案 2 :(得分:0)
如果每个ID只有两行,一个状态为0,另一个状态为= 1,则可以根据ID
列将表连接到自身,这样就可以了和新的部门ID在一行中可用:
SELECT old.ID, old.DepID AS DepOld, new.DepID AS DepNew
FROM your_table old
INNER JOIN your_table new ON old.ID = new.ID AND new.Status = 1
WHERE old.Status = 0