У меня есть sql-запрос, в котором столбцы таблицы результатов - это месяцы года: январь - декабрь.
DECLARE @Ventas MONEY
declare @i int
declare @ano int
declare @mes int
set @ano = 2016
set @mes = 12
set @i = 1
WHILE @i <= @mes
BEGIN
set @Ventas = (SELECT SUM(LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT) BALANCE
FROM LEDGER_ACCOUNT AS LAC, LEDGER_ACCOUNT_BALANCE AS LAB
WHERE YEAR(LAB.POSTING_DATE)= @ano
and MONTH(LAB.POSTING_DATE)= @i
and LAC.ACCOUNT_ID = LAB.ACCOUNT_ID
AND LAB.CURRENCY_ID = 'NIO'
AND (LAC.ACCOUNT_ID LIKE '43' + '%'))
SELECT '43' CUENTA, 'Ventas' DESCRIPTION, @Ventas BALANCE , @Ventas/@Ventas PER
set @i = @i + 1;
END;
Это выдает мне двенадцать месяцев, но в отдельных таблицах, я хочу, чтобы они были объединены в одну строку:
Я сделал это ДРУГИМ, прежде чем они появились в одной строке, но у меня были проблемы со столбцом «PER» (я не могу его смонтировать):
SELECT '43' CUENTA, 'Ventas' DESCRIP ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 1 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) ENERO,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 2 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) FEBRERO ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 3 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) MARZO ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 4 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) ABRIL ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 5 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) MAYO ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 6 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) JUNIO ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 7 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) JULIO ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 8 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) AGOSTO ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 9 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) SEPTIEMBRE ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 10 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) OCTUBRE ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 11 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) NOVIEMBRE ,
SUM(CASE MONTH(LAB.POSTING_DATE) WHEN 12 THEN
LAB.CREDIT_AMOUNT - LAB.DEBIT_AMOUNT ELSE 0 END) DICIEMBRE
FROM LEDGER_ACCOUNT AS LAC, LEDGER_ACCOUNT_BALANCE AS LAB
WHERE YEAR(LAB.POSTING_DATE)= @ano
and LAC.ACCOUNT_ID = LAB.ACCOUNT_ID
AND LAB.CURRENCY_ID = 'NIO'
AND (LAC.ACCOUNT_ID LIKE '43' + '%')
Я получаю что-то вроде этого, мне нужен столбец PER (Продажи / Продажи) для каждого месяца года, и мы на 100, это просто пример, есть еще много PER для расчета... Продажи / Продажи — это просто ненормальный пример.
Простой способ, который позволяет вам сделать все это в одном запросе, заключается в использовании общего табличного выражения с уже имеющимся SQL: