提问人:RKh 提问时间:9/27/2023 最后编辑:RKh 更新时间:9/29/2023 访问量:67
在动态查询结果中插入一行作为第一行
Insert a row as first row in the result of a dynamic query
问:
我的以下查询已成功返回结果,但是我想在结果中添加第二个标头:
DECLARE @cols AS NVARCHAR(MAX),
@SubHeader AS NVARCHAR(MAX)
@query AS NVARCHAR(MAX)
SELECT
@cols = STUFF((SELECT ',' + QUOTENAME(SP)
FROM #MyTable
WHERE SP != ''
GROUP BY SP
ORDER BY SP
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT ET,' + @cols + ' FROM
(SELECT ET, SP, ET
FROM #MyTable
WHERE SP != '''') x
PIVOT
(MAX(ET)
FOR SP IN (' + @cols + ')) p '
PRINT @query
EXECUTE(@query);
第二个标头来自上面声明的变量中的值。@SubHeader
或者,如果我们可以合并现有的标题和子标题并显示如下:
14-DEF, 15-GHI
目前的结果如下图所示:
我需要如下标题的输出:
编辑可以使用上述查询从中提取数据的位置考虑以下架构:
declare @SampleData Table
(
ET varchar(30),
ProductId varchar(30),
PID varchar(20),
SP varchar(30),
EventT Time,
EventD Date
)
ET - 数字值:任意两位数字 PID - abc、def、geh
(这是这篇文章所讨论的子标题值)SP -
这些是目前作为主要标题的数字
EventT - 这是上面显示的结果中的第一列
其余我们不需要的其他字段。
此表中的记录如下所示:
答:
1赞
Nandalal Seth
9/29/2023
#1
如果您想要“Header=Subheader”格式的列名,那么下面是我的想法。我稍微更改了表定义,以便在试验时轻松显示。如果有帮助,请告诉我。
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
DROP TABLE IF EXISTS #MyTable
Create table #MyTable
(
ET varchar(30),
PID varchar(20),
SP varchar(30),
EventT date
)
insert into #MyTable
VALUES
(2042, 'Ext', 14, '2023-01-01' ),
(null, 'Lac', 16, '2023-01-01' ),
(11, 'Moi', 17, '2023-01-01' ),
(11, 'Moi', 17, '2023-01-05' ),
(35, 'Moi', 18, '2023-01-05' )
SELECT
@cols = STUFF((SELECT ',' + QUOTENAME(PID+ '=' + SP)
FROM #MyTable
WHERE SP != ''
GROUP BY PID+ '=' + SP
ORDER BY PID+ '=' + SP
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query = 'SELECT EventT,' + @cols + ' FROM
(SELECT ET, PID + ''='' + SP AS SP, EventT
FROM #MyTable
WHERE SP != '''') x
PIVOT
(MAX(ET)
FOR SP IN (' + @cols + ')) p '
PRINT @query
EXECUTE(@query);
评论
0赞
RKh
10/4/2023
让我试试这个。
评论
#MyTable