有关此问题的更多背景信息,请参阅here。
我有一个使用GROUP BY
和子字符串
use thedatabase;
declare @fromDate datetime = '2016-02-01 00:00:00.000';
declare @toDate datetime = '2016-02-02 23:59:59.999';
declare @source varchar(15) = 'server001';
DECLARE @countForType bigint;
DECLARE @totalForType decimal(30,8);
DECLARE @country varchar(10);
SELECT @countForType = count(*),
@totalForType = SUM(typeTable.amount),
@country =
case
when (charindex('[', typeTable.source) > 0 and charindex(']', typeTable.source) > 0)
then substring(typeTable.source, charindex('[', typeTable.source) +1, (charindex(']', typeTable.source) - 1) - charindex('[', typeTable.source))
else null
end
FROM
theTypeTable typeTable (nolock)
WHERE
typeTable.startDate > @fromDate
AND typeTable.startDate < @toDate
AND typeTable.source like @source
GROUP BY
case
when (charindex('[', typeTable.source) > 0 and charindex(']', typeTable.source) > 0)
then substring(typeTable.source, charindex('[', typeTable.source) +1, (charindex(']', typeTable.source) - 1) - charindex('[', typeTable.source))
else null
end
我希望能够将其转换为报告格式,方法是循环并使用PRINT打印出值或将其全部放在结果集中。要么没事。
通过研究,我可以在这里做两件事来编写报告:
使用光标并遍历结果,打印值。我不知道该怎么做。
删除标量变量并让此查询返回结果集。我在下面做了这个。下面是重写的查询。但是,它只返回一行。
返回一行:
Select count(*) as countForType,
SUM(typeTable.amount) as totalForType,
case
when ( charindex('[', typeTable.source) > 0 and
charindex(']', typeTable.source) > 0)
then substring( typeTable.source,
charindex('[', typeTable.source) +1,
(charindex(']', typeTable.source) - 1) - charindex('[', typeTable.source))
else null
end
as country
FROM theTypeTable typeTable (nolock)
WHERE typeTable.startDate > @fromDate
AND typeTable.startDate < @toDate
AND typeTable.source like @source
GROUP BY
case
when ( charindex('[', typeTable.source) > 0 and
charindex(']', typeTable.source) > 0)
then substring( typeTable.source,
charindex('[', typeTable.source) +1,
(charindex(']', typeTable.source) - 1) - charindex('[', typeTable.source))
else null
end
返回类似的内容:
countForType totalForType country
=========================================
590 82983909 NULL
理想情况下,我想要一个结果集或打印输出的报告,其中包含以下信息:
countForType: 104
totalForType: 110000.00000000
country: en-US
countForType: 55
totalForType: 95000.00000000
country: de-CH
countForType: 25
totalForType: 5000.00000000
country: tr-TR
countForType: 30
totalForType: 10000.00000000
答案 0 :(得分:0)
我会说你可以使用一些脚本,比如
SELECT 'countForType: ' & count (*) + '
totalForType: ' & SUM(typeTable.amount) as totalForType
FROM
....
在行中的最后一个撇号之后,我按下了回车键,这将使行更改为查询的一部分。
在文本模式下执行查询,先按Ctrl + T,然后希望得到结果。