我有一组 4 张表,保单表、保险范围表、车辆表和驾驶员表。
策略表示例
保单编号 | 记录布局 |
---|---|
ABC | 波尔 |
Efg | 波尔 |
覆盖范围表示例
保单编号 | 记录布局 |
---|---|
ABC | 道具 |
ABC | |
Efg | 道具 |
车辆表示例
保单号码 | 记录布局 | vin 号码 |
---|---|---|
ABC | prp1 | 123 |
ABC | prp1 | 123 |
Efg | Prp1 | 456 |
驱动程序表示例
保单编号 | 记录布局 | vin 号码 |
---|---|---|
ABC | 主题 | 123 |
ABC | 主题 | 123 |
Efg | 主题 | 456 |
我需要获取第一个保单记录,然后是关联的保险范围,然后是关联的车辆记录,然后是关联的驾驶员记录。我必须循环所有表,并且需要使用 SQL whileloop 编写逻辑。请给我一些指导方针来实现这一目标。
所需输出:
保单编号 | 记录布局 | V 输入号码 |
---|---|---|
ABC | 波尔 | 空 |
ABC | 道具 | 空 |
ABC | prp1 | 123 |
ABC | 主题 | 123 |
ABC | 主题 | 123 |
Efg | 波尔 | 空 |
Efg | 道具 | 空 |
Efg | prp1 | 456 |
Efg | 主题 | 456 |
您不需要循环,一个简单的
union all
查询以及用于对结果进行排序的附加硬编码值将为您提供所需的结果:
;WITH CTE AS
(
SELECT [Policy Number], [Record Layout], NULL as [VIn number], 1 As [Table Order]
FROM Policy
UNION ALL
SELECT [Policy Number], [Record Layout], NULL, 2
FROM Coverage
UNION ALL
SELECT [Policy Number], [Record Layout], [VIn number], 3
FROM vehicle
UNION ALL
SELECT [Policy Number], [Record Layout], [VIn number], 4
FROM Driver
)
SELECT [Policy Number], [Record Layout], [VIn number]
FROM CTE
ORDER BY [Policy Number], [Table Order]