有人可以告诉我我做错了什么,如果我能得到期望的结果......
(请记住这是VIEW
)
SELECT
[Id]
, [Nome]
, [Estado]
, (SELECT COUNT(EstProc) FROM LoginsImp AS LI WHERE (EstProc = 'A1.' OR EstProc = 'A2.') AND LI.LogImpFiles_Id = LIF.Id) AS ItemsProcessamento
, (SELECT COUNT(EstProc) FROM LoginsImp AS LI WHERE EstProc = 'A3.' AND LI.LogImpFiles_Id = LIF.Id) AS ItemsErroProcessamento
, (SELECT COUNT(EstProc) FROM LoginsImp AS LI WHERE (EstProc= 'A4' OR EstProc= 'A5') AND LI.LogImpFiles_Id= LIF.Id) AS ItemSucessoProcessamento
, SUM(ItemsErroProcessamento + ItemSucessoProcessamento) AS [ItemsProcessados]
, [CreatedOn]
, [CreatedBy]
FROM
[dbo].[LogImpFiles] AS LIF
GROUP BY
[Id], Nome, Estado, CreatedOn, CreatedBy
结果如下:
1 TesteImport1 6 2 3 0 2015-08-04 15:41:41.5130000 110032797
我期待这样的事情:
1 TesteImport1 6 2 3 **5** 2015-08-04 15:41:41.5130000 110032797
答案 0 :(得分:1)
我很想说“这只是你的数据”。也就是说,您的问题没有足够的信息。
但是,我怀疑问题是NULL
值。如果任一值为+
,则NULL
会返回NULL
。所以,试试这个:
SUM(COALESCE(ItemsErroProcessamento, 0) + COALESCE(ItemSucessoProcessamento, 0)
) AS [ItemsProcessados]
答案 1 :(得分:1)
使用JOIN
进行条件聚合而不是子查询。正如JamesZ所指出的,SUM
不会使用列别名。
SELECT
[Id]
, [Nome]
, [Estado]
, COUNT(CASE WHEN LI.EstProc = 'A1.' OR LI.EstProc = 'A2.' THEN LI.EstProc END) AS ItemsProcessamento
, COUNT(CASE WHEN LI.EstProc = 'A3.' THEN LI.EstProc END) AS ItemsErroProcessamento
, COUNT(CASE WHEN LI.EstProc= 'A4' OR LI.EstProc= 'A5' THEN LI.EstProc END) AS ItemSucessoProcessamento
, SUM(CASE WHEN LI.EstProc IN('A1.', 'A2.', 'A4', 'A5') THEN 1 ELSE 0 END) AS [ItemsProcessados]
, [CreatedOn]
, [CreatedBy]
FROM [dbo].[LogImpFiles] AS LIF
LEFT JOIN LoginsImp LI
ON .LogImpFiles_Id = LIF.Id
GROUP BY [Id], Nome, Estado, CreatedOn, CreatedBy
答案 2 :(得分:0)
SELECT
[Id]
, [Nome]
, [Estado]
, ItemsProcessamento
, ItemsErroProcessamento
, ItemSucessoProcessamento
, SUM(ItemsErroProcessamento + ItemSucessoProcessamento) AS [ItemsProcessados]
, [CreatedOn]
, [CreatedBy]
FROM
(
SELECT
[Id]
, [Nome]
, [Estado]
, (SELECT COUNT(EstProc) FROM LoginsImp AS LI WHERE (EstProc = 'A1.' OR EstProc = 'A2.') AND LI.LogImpFiles_Id = LIF.Id) AS ItemsProcessamento
, (SELECT COUNT(EstProc) FROM LoginsImp AS LI WHERE EstProc = 'A3.' AND LI.LogImpFiles_Id = LIF.Id) AS ItemsErroProcessamento
, (SELECT COUNT(EstProc) FROM LoginsImp AS LI WHERE (EstProc= 'A4' OR EstProc= 'A5') AND LI.LogImpFiles_Id= LIF.Id) AS ItemSucessoProcessamento
, SUM(ItemsErroProcessamento + ItemSucessoProcessamento) AS [ItemsProcessados]
, [CreatedOn]
, [CreatedBy]
FROM
[dbo].[LogImpFiles] AS LIF
GROUP BY
[Id], Nome, Estado, CreatedOn, CreatedBy
)BASE
GROUP BY
[Id], Nome, Estado, , ItemsProcessamento, ItemsErroProcessamento, ItemSucessoProcessamento,CreatedOn, CreatedBy