2015-01-23 2 views
0


У меня есть таблица для студентов в моей SQLServer 2008 с следующими данными:Получение разницы между данными в SQLServer

enter image description here

Теперь, когда я обеспечиваю две даты (например, от даты, как «2015-1-. 1 'и на сегодняшний день как «2015-3-1»), я должен получить разницу в сумме за конкретные даты, а не общую сумму между датами

Разница между (общая сумма) на 2015-3 -1 и сумма (итоговые оценки) для 2015-1-1)

т.е. разница (сумма (54,80), сумма (60,58)), которая составляет 134 - 118 = 16

Заранее спасибо

ответ

2

Используйте Conditional Aggregate для этого.

SELECT Isnull(Sum(CASE WHEN Date = '2015-1-1' THEN TotalMarks ELSE 0 END), 0) - 
       Isnull(Sum(CASE WHEN Date = '2015-3-1' THEN TotalMarks ELSE 0 END), 0) 
FROM Student 
+0

Этот подход был бы хорошим @ user2470766 –

+0

@NoDisplayName спасибо тонну. Это было именно то, что я искал, Условная совокупность для плавности производительности. У меня есть еще одно требование, которое немного сложнее. Попробовав сам, если я не смогу, я отправлю его в качестве вопроса. Если возможно, пожалуйста, помогите мне с этим. Я был бы благодарен .. –

+0

@ user2470766 - рад, что это помогло. –

3

Используйте этот запрос

DECLARE @result AS INTEGER 

SET @result = ISNULL((SELECT SUM(TotalMarks) FROm Student WHERE Date = '2015-1-1'), 0) - 
      ISNULL((SELECT SUM(TotalMarks) FROm Student WHERE Date = '2015-3-1'), 0) 


SELECT @result 
+0

Спасибо @Kumar, но небольшое сомнение, нужно ли объявлять переменную 'result'? Я имею в виду, не могу ли я связать его внутри оператора select, потому что одновременно с этим я выполняю другие запросы. Так это будет мешать производительности? пожалуйста, свяжитесь с нами –

+0

@ user2470766: выбор запроса возвращает одну строку или больше? –

+0

Фактически я упростил здесь требование. Мой фактический запрос немного сложный. Но да для заданного вопроса ваш запрос служил цели, поэтому большое спасибо. Я отправлю другой вопрос для моего реального требования .... –

Смежные вопросы