我正在尝试显示如下数据。它在同一主标题下有不同的标题行。 1 evid可以有任意数量的docref。并且到最后没有主列标题只有子列标题存在。请帮助。(我使用的是sql server 2012)
EVID Basis Period Evidence AssignedTo EVEditors FileName
1234 CAI 2011 Load Jack jack,jill caidoc.txt
DocRef Specific LastUser DocType DocTitle DocID
12 report jack case abc 111111
fileName url details
xyz sometext sometext
linkText Notes
some text some text
DocRef Specific LastUser DocType DocTitle DocID
13 report2 jill case2 abc 22222
fileName url details
xyz sometext sometext
linkText Notes
some text some text
答案 0 :(得分:0)
UNION
和ROW_NUMBER()
;WITH cte AS (SELECT *, ROW_NUMBER() OVER(ORDER BY EVID) RowRank
FROM YourTable)
SELECT 'EVID', 'Basis', 'Period', 'Evidence', 'AssignedTo', 'EVEditors', 'FileName'
UNION
SELECT EVID, Basis, Period, Evidence, AssignedTo, EVEditors, FileName
FROM cte
WHERE RowRank = 1
UNION
SELECT '','','','DocRef','Specific', 'LastUser', 'DocType', 'DocTitle', 'DocID'
UNION
SELECT DocRef, Specific, LastUser, DocType, DocTitle, DocID
FROM cte
WHERE RowRank = 1
......
CAST
所有尚未到VARCHAR(50)
的内容
由于防火墙限制,UNION
+ UNION
只能将这些字词发布在一起。
您可以使用循环来构建语句的重复部分,但同样,这也解决了SQL中不需要在SQL中解决的问题。
答案 1 :(得分:0)
您确实理解查询只返回行。虽然您可以编写复杂的TSQL来清空字段,但我不会建议它。因此,DocRef 12和DocRef 13将重复EVID信息。
EVID ... DocRef
1234 ... 12
1234 ... 13
您在此处展示的是一份报告。您需要SSRS或某些报表编写器才能通过仅显示标题行(父级)一次来打印数据。然后是两个子行。
这是一个可以使用的快速示例数据库。
-- Sample table 1
create table #header
(
evid int,
basis varchar(3),
period int,
evidence varchar(16),
assigned_to varchar(32),
editors varchar(32),
file_names varchar(32)
);
-- Add data 2 table 1
insert into #header values
(1234, 'CAI', 2011, 'Load', 'Jack', 'jack,jill', 'caidoc.txt');
-- Add data 2 table 1
insert into #header values
(5678, 'ABC', 2013, 'Load', 'Johnny', 'johnny,appleseed', 'apples.txt');
-- Sample table 2
create table #detail
(
evid int,
docref int,
specific varchar(16),
last_user varchar(32),
doc_type varchar(32),
doc_title varchar(32),
doc_id int,
file_names varchar(32),
url varchar(32),
details varchar(32),
link_text varchar(64),
notes varchar(128)
);
-- Add data 2 table 2
insert into #detail values
(1234, 12, 'report', 'jack', 'case', 'abc', 111111, 'xyz', 'url1', 'detail1', 'link1', 'notes1');
-- Add data 2 table 2
insert into #detail values
(1234, 13, 'report', 'jill', 'case', 'abc', 222222, 'xyz', 'url1', 'detail1', 'link1', 'notes1');
-- Joining the parent to the child.
select * from #header as h left join #detail as d on h.evid = d.evid
联接给出以下结果。使用报告编写器来完善输出。
祝你好运。