微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

并排打印结果 SQL Server

如何解决并排打印结果 SQL Server

我有以下结果集,

Check this attached url for result set

现在有了以上结果,我想通过选择查询打印记录,如下图所示

Click here to view desired output of report

请注意,我将在输出当前员工和缺勤员工中只有两种类型的列。

我尝试使用数据透视表、临时表,但无法实现我想要的。

解决方法

一种方法是 ROW_NUMBER 每个“状态”,然后使用 FULL OUTER JOIN 将 2 个数据集放入适当的列中。我使用 FULL OUTER JOIN,因为我假设您可能有不同数量的员工在场/缺席。

CREATE TABLE dbo.YourTable (Name varchar(10),--Using a name that doesn't require delimit identification
                            Status varchar(7),--Using a name that doesn't require delimit identification
                            Days int);
GO

INSERT INTO dbo.YourTable(Name,Status,Days)
VALUES('Mal','Present',30),('Jess',20),('Rick','Absent',('Jerry',10);
GO

WITH RNs AS(
    SELECT Name,Days,ROW_NUMBER() OVER (PARTITION BY Status ORDER BY Days DESC) AS RN
    FROM dbo.YourTable)
SELECT P.Name AS PresentName,P.Days AS PresentDays,A.Name AS AbsentName,A.Days AS AbsentDays
FROM (SELECT R.Name,R.Days,R.Status,R.RN
      FROM RNs R
      WHERE R.Status = 'Present') P
    FULL OUTER JOIN (SELECT R.Name,R.RN
                     FROM RNs R
                     WHERE R.Status = 'Absent') A ON P.RN = A.RN;    


GO

DROP TABLE dbo.YourTable;

db<>fiddle

2 CTE 实际上要整洁得多:

WITH Absents AS(
    SELECT Name,ROW_NUMBER() OVER (ORDER BY Days DESC) AS RN
    FROM dbo.YourTable
    WHERE Status = 'Absent'),Presents AS(
    SELECT Name,ROW_NUMBER() OVER (ORDER BY Days DESC) AS RN
    FROM dbo.YourTable
    WHERE Status = 'Present')
SELECT P.Name AS PresentName,A.Days AS AbsentDays
FROM Absents A
     FULL OUTER JOIN Presents P ON A.RN = P.RN;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。