Member 11820531 Ответов: 1

Как я могу учитывать нулевые значения в текущей сумме?


Я пытаюсь построить данные на диаграмме ssrs. На моей оси x всегда будут нанесены значения от 1 до 31.

Проблема с моими данными заключается в том, что не каждый день есть распродажа. Пример ниже:
|Day | Quantity |
  1  |    20    | 
  2  |    40    | 
  3  |   null   | 
  4  |    60    |



То, что я пытаюсь сделать, находится ниже:
|Day | Quantity | 
| 1  |  20      |
| 2  |  40      | 
| 3  |  40*     | 
| 4  |  60      |


Что я уже пробовал:

UPDATE m
SET m.CMQty = CASE WHEN m.SkuNbr = t.ChildSku and m.Day = t.day THEN  t.QTY
			  WHEN m.SkuNbr = t.ChildSKU and m.day <> t.day THEN 0
			  end 
FROM #MonthData2 m
	left join #transform t 
		on m.SkuNbr = t.ChildSKU 
			and m.day = t.day
			and t.MonthRank = 1 

RossMW

Откуда берется 40*? Обычно вы просто используете isnull(количество, 0)

1 Ответов

Рейтинг:
5

Bryian Tan

Вот пример, вдохновленный Вычисление простых текущих итогов в SQL Server[^]. Я думаю, что ваш пример ожидаемого результата неверен. Это должно быть 20, 60, 60*, 120

DECLARE @RunTotalTestData TABLE  (
   id    int not null identity(1,1) primary key,
   value int null
);

INSERT INTO @RunTotalTestData (value) VALUES (1);
INSERT INTO @RunTotalTestData (value) VALUES (2);
INSERT INTO @RunTotalTestData (value) VALUES (4);
INSERT INTO @RunTotalTestData (value) VALUES (7);
INSERT INTO @RunTotalTestData (value) VALUES (9);
INSERT INTO @RunTotalTestData (value) VALUES (12);
INSERT INTO @RunTotalTestData (value) VALUES (NULL);
INSERT INTO @RunTotalTestData (value) VALUES (16);
INSERT INTO @RunTotalTestData (value) VALUES (22);
INSERT INTO @RunTotalTestData (value) VALUES (42);
INSERT INTO @RunTotalTestData (value) VALUES (57);
INSERT INTO @RunTotalTestData (value) VALUES (NULL);
INSERT INTO @RunTotalTestData (value) VALUES (59);
INSERT INTO @RunTotalTestData (value) VALUES (60);

;WITH temp AS(
SELECT a.id, a.value, SUM(b.Value) 'Sum'
FROM   @RunTotalTestData a,
       @RunTotalTestData b
WHERE b.id <= a.id
GROUP BY a.id, a.value

)
SELECT id,
CASE
	WHEN value is NULL THEN CONVERT(VARCHAR(5),[Sum]) +'*'
	ELSE  CONVERT(VARCHAR(5),[Sum])
END 'Quantity'

FROM temp
ORDER BY id

Выход:
id	Quantity
1	1
2	3
3	7
4	14
5	23
6	35
7	35*
8	51
9	73
10	115
11	172
12	172*
13	231
14	291