#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