Sql 枢轴和左连接
T-SQL,需要在数据透视时在一列中组合两个值的帮助 我有一个包含以下数据的员工表-Sql 枢轴和左连接,sql,sql-server,tsql,pivot,left-join,Sql,Sql Server,Tsql,Pivot,Left Join,T-SQL,需要在数据透视时在一列中组合两个值的帮助 我有一个包含以下数据的员工表- EmpId Status L# E1 A 1 E1 B 1 E2 A 2 E2 B 2 E3 B 3 E3 C 3 E3 D 3 以及一张监督桌— EmpId Sup E1 S1 E2 S2 E3 S3 我想在状态为
EmpId Status L#
E1 A 1
E1 B 1
E2 A 2
E2 B 2
E3 B 3
E3 C 3
E3 D 3
以及一张监督桌—
EmpId Sup
E1 S1
E2 S2
E3 S3
我想在状态为B或C时组合L#的值
EmpId Sup A B,C D
E1 S1 1 1 0
E2 S2 1 2 0
E3 S3 0 2 1
这可能会有帮助
DECLARE @TableEmp TABLE (EmpId VARCHAR(10), Status VARCHAR(10), L# INT)
INSERT INTO @TableEmp VALUES
('E1', 'A', 1 ),
('E1', 'B', 1 ),
('E2', 'A', 2 ),
('E2', 'B', 2 ),
('E3', 'B', 3 ),
('E3', 'C', 3 ),
('E3', 'D', 3 )
DECLARE @TableSup TABLE(EmpId VARCHAR(10), Sup VARCHAR(10))
INSERT INTO @TableSup VALUES
('E1', 'S1'),
('E2', 'S2'),
('E3', 'S3')
SELECT EmpId, Sup ,ISNULL(A,0) A, ISNULL(B,0) B,ISNULL(C,0) C,ISNULL(D,0) D
FROM(
SELECT e.EmpId, Sup,Status,ISNULL(L#,0) L#
FROM @TableEmp e
LEFT JOIN @TableSup s ON e.EmpId = s.EmpId
) p
PIVOT(
SUM(L#)
FOR Status IN (A, B, C,D)
) piv
以下查询应满足您的要求:
CREATE TABLE #emp (EmpID VARCHAR(10), [Status] VARCHAR(10), L# INT)
CREATE TABLE #sup (EmpID VARCHAR(10), [Sup] VARCHAR(10))
INSERT INTO #emp VALUES
('E1','A',0),
('E1','B',1),
('E2','A',2),
('E2','B',2),
('E3','B',3),
('E3','C',5),
('E3','D',5)
INSERT INTO #sup VALUES
('E1','S1'),
('E2','S2'),
('E3','S3')
SELECT * FROM (
SELECT e.EmpID, s.Sup, t.[Status], COUNT(L#) AS [Cnt]
FROM #emp e
INNER JOIN #sup s ON e.EmpID = s.EmpID
CROSS APPLY (VALUES(CASE WHEN e.[Status] IN ('B','C') THEN 'B,C' ELSE e.[Status] END)) AS T([Status])
GROUP BY e.EmpID, s.Sup, t.[Status] ) A
PIVOT (MAX([Cnt]) FOR [Status] IN ([A],[B,C],[D])) pvt
结果如下:
EmpID Sup A B,C D
E1 S1 1 1 NULL
E2 S2 1 1 NULL
E3 S3 NULL 2 1
只需使用条件聚合。我有点不清楚结果是什么。以下统计状态:
select s.empid, s.sup,
sum(case when status = 'A' then 1 else 0 end) as a,
sum(case when status in ('B', 'C') then 1 else 0 end) as bc,
sum(case when status = 'D' then 1 else 0 end) as d
from employee e join
supervisor s
on e.empid = s.empid
group by s.empid, s.sup;
预期输出显示五列,但只有四列标题。请修复您的数据。您使用了哪个数据库?oracle或SQLServer谢谢Tim。标题已关闭。我离开时将Employee表与Supervisor表合并。因此,Employee表中有4列,Supervisor表中有1列(Sup)。@Ajay2707,SQLserver@JHegde在您的预期结果中,E2->S2->A的值是怎样的
1
不应该是2
,如果您正在计算,那么E2->S2->B,C的值应该是1
而不是2
。请澄清