我有一些包含一些行的表。我想要的是我想显示最后一行中将自动生成的特定字段的总和。
我的SQL代码:
SELECT
Account,
Amount = SUM(Amount),
EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE EndDate END
FROM Test.dbo.T_OP
GROUP BY Account, EndDate WITH ROLLUP
HAVING GROUPING(Account) =0;
错误讯息:
Error converting a string to a date and / or time.
如果我更改了else部分,我得到了所需的结果,只显示我的日期。
修改后的代码:
SELECT
Account,
Amount = SUM(Amount),
EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE 'FakeDate' END
FROM Test.dbo.T_OP
GROUP BY Account, EndDate WITH ROLLUP
HAVING GROUPING(Account) =0;
输出:
Account Amount EndDate
70000 776,98 FakeDate
70000 776,98 Total
70108 131,8 FakeDate
70108 60,3 FakeDate
70108 101,1 FakeDate
70108 40,8 FakeDate
70108 694,05 FakeDate
70108 1028,05 Total
如何才能正确播放日期?
答案 0 :(得分:6)
在CASE WHEN
部分,您要返回string 'Total'
,但在ELSE
部分中,您将返回date type value
,那么一列如何才能拥有两种类型的数据,因此您需要到cast your date to string type
,如下所示:
CAST(End_Date AS VARCHAR)
OR
CONVERT(VARCHAR, End_Date , 120)
更正后的查询:
SELECT
Account,
Amount = SUM(Amount),
EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total'
ELSE CAST(End_Date AS VARCHAR) END
FROM Test.dbo.T_OP
GROUP BY Account, EndDate WITH ROLLUP
HAVING GROUPING(Account) =0;
答案 1 :(得分:1)
更改此行:
EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE EndDate END
要:
EndDate = CASE WHEN GROUPING(EndDate) = 1 THEN 'Total' ELSE convert(varchar(25), EndDate, 120) END