计算来自单独查询的行
Count rows from a seperate query
好的,我已经尝试搜索此问题的答案,但似乎找不到。我正在使用 SQL Server 2012。我正在提取将要转到平面文件的数据。在平面文件的开头和结尾,我需要一个包含特定数据的页眉和页脚。我的问题出现在页脚中,因为我需要数据集中的行数。现在我已经这样设置了我的查询。这是为了仅尝试获取行数而简化的。
select 'header'
union
select mytable.data
from mytable
union
select 'footer'+convert(varchar(4),ROWCOUNT)
因此,为了平面文件的目的,查询按需要工作,我只需要用 mytable.data 中的行数填充 ROWCOUNT。
预期输出
Header|04||160119|||2.0|160119||
D|||||...
D|||||...
Footer|ROWCOUNT||blank||
更新:
所以就这样写了代码
select 'header'
union all
select mytable.data
from mytable
union all
select 'footer'+convert(varchar(4),@@Rowcount)
它开始工作了。不完全确定为什么 @@Rowcount 现在开始工作,虽然还不早,但现在可以工作了。谢谢大家帮助我解决这个问题。
你可以试试下面的方法
with cte
as
( select 'header' as h
union
select mytable.data as h
from mytable
)
select * from cte
select 'footer'+convert(varchar(4),@@ROWCOUNT)
您的查询如下所示:
select 'header'
union
select mytable.data
from mytable
union
select 'footer '+CAST((SELECT COUNT(*) FROM mytable) AS VARCHAR(16));
您也可以尝试使用 CTE
-
;With dataCTE
AS
(
select data, COUNT(*) over() as RowCnt
from mytable
),
footerCTE
AS
(
select 'footer'+convert(varchar(4),RowCnt) as data from dataCTE
)
select 'header' AS data
union
select data from dataCTE
union
select data from footerCTE
好的,我已经尝试搜索此问题的答案,但似乎找不到。我正在使用 SQL Server 2012。我正在提取将要转到平面文件的数据。在平面文件的开头和结尾,我需要一个包含特定数据的页眉和页脚。我的问题出现在页脚中,因为我需要数据集中的行数。现在我已经这样设置了我的查询。这是为了仅尝试获取行数而简化的。
select 'header'
union
select mytable.data
from mytable
union
select 'footer'+convert(varchar(4),ROWCOUNT)
因此,为了平面文件的目的,查询按需要工作,我只需要用 mytable.data 中的行数填充 ROWCOUNT。
预期输出
Header|04||160119|||2.0|160119||
D|||||...
D|||||...
Footer|ROWCOUNT||blank||
更新: 所以就这样写了代码
select 'header'
union all
select mytable.data
from mytable
union all
select 'footer'+convert(varchar(4),@@Rowcount)
它开始工作了。不完全确定为什么 @@Rowcount 现在开始工作,虽然还不早,但现在可以工作了。谢谢大家帮助我解决这个问题。
你可以试试下面的方法
with cte
as
( select 'header' as h
union
select mytable.data as h
from mytable
)
select * from cte
select 'footer'+convert(varchar(4),@@ROWCOUNT)
您的查询如下所示:
select 'header'
union
select mytable.data
from mytable
union
select 'footer '+CAST((SELECT COUNT(*) FROM mytable) AS VARCHAR(16));
您也可以尝试使用 CTE
-
;With dataCTE
AS
(
select data, COUNT(*) over() as RowCnt
from mytable
),
footerCTE
AS
(
select 'footer'+convert(varchar(4),RowCnt) as data from dataCTE
)
select 'header' AS data
union
select data from dataCTE
union
select data from footerCTE