SQL Server CASE - WHEN - ELSE

时间:2016-01-26 01:50:22

标签: sql-server sum case

我有2张这样的表:

  • 表格{ "userSecretsId": "aspnet5-WebApplication7-0b4c05f0-6435-486b-9738-1b6aa3daee2c", "version": "1.0.0-*", "compilationOptions": { "emitEntryPoint": true }, "dependencies": { "EntityFramework.Commands": "7.0.0-rc1-final", "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final", "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final", "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final", "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final", "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final", "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final", "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final", "Microsoft.Extensions.Logging": "1.0.0-rc1-final", "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final", "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final", "System.Net.Http": "4.0.1-beta-23516", "Foo": "1.0.0-beta-1" }, "commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" }, "frameworks": { "dnx451": { } }, "exclude": [ "wwwroot", "node_modules" ], "publishExclude": [ "**.user", "**.vspscc" ], "scripts": { "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ] } } CTNumberCtIDDate
  • 表格CTIEVTNumberVtID

我的代码:

Quantities

此代码工作正常,但结果不是我想要的。某些SELECT MAX(CT.Date), MAX(CT.CtID), VT.VtID, SUM(VT.Quantities) AS SumVT, CASE WHEN CT.CTIE = 0 THEN SUM(VT.Quantities) ELSE 0 END AS IMPORT, CASE WHEN CT.CTIE = 1 THEN SUM(VT.Quantities) ELSE 0 END AS EXPORT FROM CT INNER JOIN VT ON CT.Number = VT.Number GROUP BY VT.VtID, CT.CTIE ORDER BY VT.VtID 同时包含VtIDCTIE = 1,SQL现在返回2个具有相同CTIE = 1的单独行,一个用于VtID,另一行用于CTIE = 0 }。但我需要它只为每个CTIE = 1而不是2显示一行。

1 个答案:

答案 0 :(得分:0)

删除组中的CT.CTIE并将您的case语句放在聚合函数

SElECT 
    MAX(CT.Date), MAX(CT.CtID), VT.VtID, SUM(VT.Quantities) AS SumVT,
    SUM(CASE WHEN CT.CTIE = 0 THEN VT.Quantities ELSE 0 END) AS IMPORT,
    SUM(CASE WHEN CT.CTIE = 1 THEN VT.Quantities ELSE 0 END) AS EXPORT 
FROM CT INNER JOIN VT ON CT.Number=VT.Number
GROUP BY  VT.VtID
ORDER by VT.VtID