SSRS вычитают минус-число из списка в столбце суммы

#sql #reporting-services #dataset

#sql #отчетность-услуги #набор данных

Вопрос:

У меня есть запрос к набору данных SSRS, который содержит СУММУ в столбце значений, которые представляют десятичное время отсутствия лиц, которое администратор вводит каждый раз, когда для учащегося регистрируется отсутствие. В базе данных uni сотрудники, похоже, добавляют записи об отсутствии, которые также показывают часы, которые должны быть удалены из записи, и они делают это, просто ставя минус перед числом. Можно ли заставить этот столбец распознать минус как вычитание и удалить его из общей суммы? Вы можете видеть внизу списка, что была введена запись за 187,50 часов отсутствия, но затем была добавлена другая запись за тот же период отсутствия, в которой отмечалось, что 150,00 из этих часов должны быть вычтены (они восполнили нехватку часов размещения другим способом). Надеюсь, я объяснил этот запрос, приложил скриншот запроса dataset. Я не уверен, правильно ли я добавил скриншот. Спасибо.

введите описание изображения здесь

Ответ №1:

Я думаю, вы можете просто добавить оператор CASE для проверки наличия знака минус в сумме и использовать 0, если это отрицательное число.

CAST(dbo.srs_enl.enl_udfb AS DECIMAL(27, 2))

станет

CAST(CASE WHEN LEFT(dbo.srs_enl.enl_udfb, 1) = '-' THEN 0 ELSE dbo.srs_enl.enl_udfb END AS DECIMAL(27, 2))

или вы можете использовать логическую логику, умножив значение на 0, если оно меньше 0:

CAST(dbo.srs_enl.enl_udfb AS DECIMAL(27, 2)) * CASE WHEN CAST(dbo.srs_enl.enl_udfb AS INT) < 0 THEN 0 ELSE 1 END

Ответ №2:

Я полагаю, вы хотели бы, чтобы последние две записи отображались как одна запись с 37,50 в последнем столбце? Если это правильно, то это выглядит как ваша группировка по слишком большому количеству столбцов.

Кажется, вы группируете по

  • sab_stuc — OK
  • sab_begd — OK
  • sab_endf — OK
  • enl_eltc — не отображается в выходных данных, вероятно, может быть удален из GROUP BY предложения
  • enl_udfd — не отображается в выходных данных, вероятно, может быть удален из GROUP BY предложения
  • enl_ufdb — суммируемое значение so должно быть удалено из GROUP BY предложения

Если вы удалите 3 столбца из предложения group by, сумма должна «просто работать», как и ожидалось.


Еще одна вещь… Попробуйте использовать псевдонимы имен таблиц, это значительно упростит чтение вашего SQL.

Итак, что-то вроде

 SELECT 
      dbo.TableA.columnA, dbo.TableB.columnB
      FROM dbo.TableA
          JOIN dbo.TableB on dbo.TableA.myKeyColumn = dbo.TableB.myKeyColumn
      ORDER BY dbo.TableA.columnA
 

использование псевдонимов будет выглядеть следующим образом

 SELECT 
      a.columnA, b.columnB
      FROM dbo.TableA a
          JOIN dbo.TableB b on a.myKeyColumn = b.myKeyColumn
      ORDER BY a.columnA