【发布时间】:2012-03-31 01:01:40
【问题描述】:
对于我正在编写的特殊报告,我需要有关复杂 t/sql 查询的帮助。 我不太清楚如何表达这个问题;但我会试一试:
基本上,我有如下三个表:
@PrimaryTable
Key - Is unique and may or may not exist
Description1 - Some field
Description2 - Some field which works as a heading, more on this later
@Subtable1
KeyFK - is NOT unique, links to Key in primary table. May or may not exist. May also exist multiple times per Key
Description - The field I want
@Subtable2
- Just like subtable1, but does not relate to subtable1 in any way
我想将这些表加入到 PrimaryTable 中,就像使用 UNION ALL 一样,但没有所有 NULL 值。
有关示例,请参阅此查询:
DECLARE @PrimaryTable AS table ("Key" int, Description1 varchar(32), Description2 varchar(32)); --Contains MAXIMUM one of each Key
DECLARE @Subtable_1 AS table ("KeyPK" int, SubDescription1 varchar(32)); --Can contain zero, one or more lines with same KeyPK
DECLARE @Subtable_2 AS table ("KeyPK" int, SubDescription2 varchar(32)); --Can contain zero, one or more lines with same KeyPK
INSERT INTO @PrimaryTable VALUES (1, 'Description', 'Heading');
INSERT INTO @PrimaryTable VALUES (2, 'Description', 'Heading');
INSERT INTO @PrimaryTable VALUES (3, 'Description', 'Heading');
INSERT INTO @PrimaryTable VALUES (5, 'Description', 'Heading');
INSERT INTO @PrimaryTable VALUES (6, 'Description', 'Heading');
INSERT INTO @PrimaryTable VALUES (7, 'Description', 'Heading');
INSERT INTO @PrimaryTable VALUES (8, 'Description', 'Heading');
INSERT INTO @Subtable_1 VALUES (1, 'Subdescription1_1');
INSERT INTO @Subtable_2 VALUES (2, 'Subdescription2_1');
INSERT INTO @Subtable_1 VALUES (3, 'Subdescription1_1');
INSERT INTO @Subtable_2 VALUES (3, 'Subdescription2_1');
INSERT INTO @Subtable_1 VALUES (4, 'Subdescription1_1');
INSERT INTO @Subtable_2 VALUES (4, 'Subdescription2_1');
INSERT INTO @Subtable_2 VALUES (4, 'Subdescription2_2');
INSERT INTO @Subtable_1 VALUES (5, 'Subdescription1_1');
INSERT INTO @Subtable_1 VALUES (5, 'Subdescription1_2');
INSERT INTO @Subtable_2 VALUES (5, 'Subdescription2_1');
INSERT INTO @Subtable_1 VALUES (6, 'Subdescription1_1');
INSERT INTO @Subtable_2 VALUES (6, 'Subdescription2_1');
INSERT INTO @Subtable_2 VALUES (6, 'Subdescription2_2');
INSERT INTO @Subtable_1 VALUES (7, 'Subdescription1_1');
INSERT INTO @Subtable_1 VALUES (7, 'Subdescription1_2');
我希望结果如下所示:
/*
Key Description1 Description2 Subdescription1 Subdescription2
_________________________________________________________________________
1 Description Heading '' ''
1 Description '' Subdescription1_1 NULL
2 Description Heading '' ''
2 Description '' NULL Subdescription2_1
3 Description Heading '' ''
3 Description '' Subdescription1_1 Subdescription2_1
5 Description Heading '' ''
5 Description '' Subdescription1_1 Subdescription2_1
5 Description '' Subdescription1_2 NULL
6 Description Heading '' ''
6 Description '' Subdescription1_1 Subdescription2_1
6 Description '' NULL Subdescription2_2
7 Description Heading '' ''
7 Description '' Subdescription1_1 NULL
7 Description '' Subdescription1_2 NULL
8 Description Heading '' ''
*/
带有空描述的标题行没有问题;之后可以使用联合轻松完成,但我不知道如何像这样加入这些表 - 有谁知道如何做到这一点?
编辑: 我应该从一开始就解释报告: 我正在研究一个非常棒的数据库结构,但我有一个非常奇怪的报告要求。
PrimaryTable 是报告要求的实际表 Subtable1 是解释主表不同部分的表,这是真实信息。 Subtable2 不是表,而是分解为一行 pr 的合同(PrimaryTable 中的一个字段)。行。
然后,报表希望主表中的所有信息作为标题,包括一些小计。然后有一个折叠选项,它打开到一排公关。 subtable2 描述/合同中的行。 pr Key 的行数简单地显示了每个折叠的长度。
SQL 将尽可能多地完成报告回答时间。 - 这将是一个存储过程,它将生成一个基于快速回答解决方案的表格
【问题讨论】:
标签: sql sql-server tsql join