hay*_*yes 2 sql sql-server aggregate
我需要一个存储过程从一个表中选择行,做一个Group By,Sum,然后将结果与他们的价值观另一个表。
我想当rfds_processing_id(类似于订单号)匹配现有行时,我必须进行合并,而在不匹配时,则进行插入。我目前在控制器中的Linq中执行类似的操作,但是无法在SQL中弄清楚。
ALTER PROCEDURE [dbo].[ProposedSummary]
(@rfds_processing_id UNIQUEIDENTIFIER = NULL)
AS
BEGIN
SET NOCOUNT ON
INSERT INTO Summary_Proposed(model, type, elevation, qty)
SELECT model, type, elevation, SUM(qty)
FROM Current_Antenna C
WHERE C.rfds_processing_id = @rfds_processing_id
GROUP BY C.model
END
Run Code Online (Sandbox Code Playgroud)
这就是我在Controller中执行的操作,并将其发送到View
var summary_c = current
.Where(x => !string.IsNullOrWhiteSpace(x.model) && (x.rfds_processing_id == ))
.GroupBy(x => x.model)
.Select(x =>
{
var c = new
{
model = x.Key,
type = x.Select(y => y.type).First(),
elevation = x.Select(y => y.elevation).First(),
qty = x.Sum(y => y.qty)
};
return c;
}).ToList();
Run Code Online (Sandbox Code Playgroud)
这是正常工作的第一部分的更新
INSERT INTO Summary_Current(model, type, elevation, rfds_processing_id, qty)
SELECT model, type, elevation, rfds_processing_id, SUM(qty)
FROM Current_Antenna C
WHERE C.rfds_processing_id = @rfds_processing_id
AND C.model != ''
AND C.type IS NOT NULL
AND C.elevation IS NOT NULL
GROUP BY C.model, C.type, C.elevation, rfds_processing_id
Run Code Online (Sandbox Code Playgroud)
您当前的过程对我来说还可以,除了该GROUP BY子句应包含所有非聚合列,这些列也将出现在SELECT:
INSERT INTO Summary_Proposed(model, type, elevation, qty)
SELECT model, type, elevation, SUM(qty)
FROM Current_Antenna C
WHERE C.rfds_processing_id = @rfds_processing_id AND
C.type IS NULL AND C.elevation IS NULL
GROUP BY C.model, C.type, C.elevation;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62 次 |
| 最近记录: |