sql - 选择结转报告
问题描述
如何从下表中获取结转报告 + 第一份报告?
结果应为:304、306、309 和 312。
CREATE TABLE [dbo].[test](
[reportID] [int] NOT NULL,
[caseID] [int] NOT NULL,
[carriedOver] [bit] NULL,
[oldReportID] [int] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES (304, 4, 1, NULL)
GO
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES (305, 4, 0, NULL)
GO
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES (306, 4, 1, 304)
GO
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES (309, 4, 1, 306)
GO
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES
(311, 4, 0, NULL)
GO
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES
(312, 4, 1, 309)
GO
经过一些修补后,当只有一个 caseID 时,解决方案需要进行一些调整。
INSERT [dbo].[test] ([reportID], [caseID], [carriedOver], [oldReportID])
VALUES (100, 1, 0, NULL)
GO
declare @caseID int = 1
SELECT t.reportID, tr.*, t.*
FROM dbo.test t
INNER JOIN ( SELECT ROW_NUMBER() OVER (ORDER BY reportID) AS RowNum,
reportID
FROM dbo.test
WHERE caseID = @caseID ) tr on tr.reportID = t.reportID
WHERE ( exists ( SELECT 1 FROM dbo.test t1
WHERE t1.reportID = t.oldReportID
and t1.caseID = @caseID ) or
exists ( SELECT 1 FROM dbo.test t2
WHERE t2.oldReportID = t.reportID
and t2.caseID = @caseID ) or
tr.rowNum < 2 )
and caseID = @caseID
ORDER BY 1 asc
解决方案
您可以使用EXISTS
:
select t.*
from test t
where exists (select 1 from test t1 where t.oldreportid = t1.reportid) or
exists (select 1 from test t1 where t1.oldreportid = t.reportid);
推荐阅读
- c# - 错误 CS0106:修饰符 'private' 对此项目无效 Unity 中的 C# 错误
- sql-server - 如何使用 ASSERT 对退出代码 IF EXISTS 条件的 SQL Server 存储过程进行单元测试
- java - 通过 Intelli Idea 中的 Maven 支持 pi4j-maven Archetype
- python - 如何在我的神经网络输出中打印所有值?
- ruby-on-rails - 元编程 rake 任务时,.rake 文件中的模型不可用
- amazon-s3 - 来自 AWS CloudFront 的地图图块的缓存 Http 错误 404
- typescript - 没有泛型的 Typescript 中的 NonEmptyString 类型
- kotlin - ActivityResultLauncher 不使用片段?
- python - 非整数乘法有问题
- python - 需要提取并显示具有特定最小值的行