#sql #sql-server #tsql
#sql #sql-server #tsql
Вопрос:
В текущем запросе я должен указать месяц 0, месяц 1, месяц 2, месяц 3… до месяца 18. как вы можете видеть, есть ли какой-либо способ изменить этот запрос таким образом, чтобы он автоматически вычислял разницу в месяце между оплаченной датой и открытой датой, а затем заполнял столбец суммой суммы платежа за этот месяц. ТАКИМ образом, он не будет ограничен 18 месяцем и будет автоматически создавать и заполнять значение до месяца n без указания месяцев.
SELECT
[loan_number],
acctrefno,
open_date/*FORMAT(CAST(op.open_date as date), 'yyyy-MM') AS year_month,*/
, [Month -1] = IsNull([-1], 0)
, [Month 0] = IsNull([0], 0)
, [Month 1] = IsNull([1], 0)
, [Month 2] = IsNull([2], 0),
[Month 3] = IsNull([3], 0)
, [Month 4] = IsNull([4], 0)
, [Month 5] = IsNull([5], 0)
, [Month 6] = IsNull([6], 0)
, [Month 7] = IsNull([7], 0)
, [Month 8] = IsNull([8], 0)
, [Month 9] = IsNull([9], 0)
, [Month 10] = IsNull([10], 0)
, [Month 11] = IsNull([11], 0)
, [Month 12] = IsNull([12], 0), [Month 13] = IsNull([13], 0), [Month 14] = IsNull([14], 0), [Month 15] = IsNull([15], 0), [Month 16] = IsNull([16], 0), [Month 17] = IsNull([17], 0), [Month 18] = IsNull([18], 0)
/*,[Month 70] = IsNull([70],0)*/
FROM
(SELECT
L.loan_number
, l.acctrefno/*, FORMAT(CAST(l.open_date as date), 'yyyy-MM') AS open_date*/
, format(cast(l.open_date AS date), 'MM/dd/yyyy', 'en-US') AS open_date/*, */ ,
Item = DateDiff(WEEK, [open_date], [datepaid]), Value = [tot_receipts]
FROM
[NLS].[dbo].loanacct L
INNER JOIN
[NLS].[dbo].[loanacct_detail] LD1 ON LD1.acctrefno = L.acctrefno
LEFT JOIN
[NLS].[dbo].OwnPayments_2 OP ON L.acctrefno = OP.acctrefno
WHERE /*p(ayment_type = 'zz' or payment_type IS NULL) AND */ L.portfolio_code_id = 11/*AND l.loan_type = 0*/ ) src
PIVOT (sum(Value) FOR Item IN ([-1], [0], [1], [2], [3], [4], [5], [6], [7], [8], [9], [10],
[11], [12], [13], [14], [15], [16], [17], [18])) pvt
Комментарии:
1. Если вы не используете динамический sql, нет. Подумайте о том, что вы спрашиваете; столбцы результирующего набора похожи на свойства объекта. Они не меняются динамически время от времени. В вашем автомобиле нет кондиционера в один прекрасный день, а не на следующий, но на следующий день после этого круиз-контроль, затем через 2 дня его заменяют на крышу луны. Почему важно, чтобы столбцы не изменялись динамически? Поскольку обычно интерфейс должен быть перекомпилирован, чтобы справиться с этим .. Вы пытаетесь выполнить в серверной части то, что на самом деле является задачей интерфейса; база данных должна предоставлять строки, интерфейс должен их сопоставлять / сводить
2. Спасибо за вашу информацию.