我在SQL表下面有名称TEST_T
SKU_ID DC_ID CRT_DTTM FIELD_NAME TOTAL
------------------------------------------------------------------------
sku1 dc1 2017-08-02 02:28:41.711 FIELD1 5
sku1 dc1 2017-08-01 01:28:41.711 FIELD1 4
sku2 dc1 2017-08-02 03:12:10.064 FIELD1 6
sku2 dc1 2017-08-01 04:12:10.064 FIELD1 1
sku3 dc2 2017-08-02 07:32:46.795 FIELD1 3
sku4 dc2 2017-08-02 10:44:09.347 FIELD1 2
并且有很多具有不同DC_ID的记录,上面仅仅是例如。 我有一个以下工作查询,它将所有DC_ID为dc1的记录的总和加起来
select A.DC_ID , sum(TO_NUMBER(A.TOTAL)) as SUM FROM (
Select A.DC_ID, A.SKU_ID, A.CRT_DTTM, A.FIELD_NAME, A.TOTAL
FROM TEST_T A
INNER JOIN (
Select DC_ID, FIELD_NAME, Max(CRT_DTTM) as LatestDate, SKU_ID from TEST_T
Where DC_ID = 'dc1'
AND FIELD_NAME = 'FIELD1'
Group By DC_ID, FIELD_NAME, SKU_ID
) B
on A.CRT_DTTM = B.LatestDate
and A.SKU_ID = B.SKU_ID
and A.DC_ID = B.DC_ID
and A.FIELD_NAME = B.FIELD_NAME)
Group By A.DC_ID;
将结果显示为
A.DC_ID SUM
---------------
dc1 11
如何以通用方式修改上述查询以处理很多DC_ID,这样我将得到如下结果
A.DC_ID SUM
---------------
dc1 11
dc2 5
dc3 7
dc4 9
dc5 18
etc.....
答案 0 :(得分:3)
您的输出可以通过以下查询来实现。你还没有解释为什么你创建了内部子查询和加入。如果您解释该查询可能不同
select dc_id, sum(Total) as_sum from test_t Group by DC_ID
您也可以尝试以下查询。我还没有对结果进行测试,但它可以让您了解rank
的用法 select dc_id,sum(_sum) _sum from
(
select sum(total) over partition by(Dc_ID) as _sum,
rank() over partition by(Dc_ID,skuid order by CRT_DTTM desc) as rno,
dc_ID
) t
where rno=1
Group by DC_ID
早期的问题是sql-server
的标签,所以答案是根据没有它可以帮助其他人使用sql server
答案 1 :(得分:0)
为什么使用复杂查询需要一个简单的查询,例如下面的代码
select DC_ID , sum(TOTAL) as [SUM] FROM TEST_T group by DC_ID
现在,如果您需要某个字段的位置,可以使用下面的代码
select DC_ID , sum(TOTAL) as [SUM] FROM TEST_T where FIELD_NAME = 'FIELD1' group by DC_ID
如果您需要更多帮助,请告诉我......