Goran Bibic Ответов: 2

Выберите значение из нескольких таблиц MS SQL


Я использую этот код и его ОК из 1 таблицы

with cte as (
select iznos_sa_porezom as 'Duguje', '0.00' as 'Potražuje',  
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN from dbo.mp_ulazni_racun_ostalo_lista 
where redni_broj  IS NOT NULL   group by  iznos_sa_porezom
)
select  [Duguje], [Potražuje],
 (SELECT sum(Duguje-Potražuje) FROM cte t2 WHERE t2.RN <= cte.RN) AS Saldo
from cte


Мне нужно выбрать из нескольких таблиц exmp 3
Как это сделать?

Я стараюсь, но не могу.

Что я уже пробовал:

with cte as (
select iznos_sa_porezom as 'Duguje', '0.00' as 'Potražuje',  
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN from dbo.mp_ulazni_racun_ostalo_lista 
where redni_broj  IS NOT NULL   group by  iznos_sa_porezom
union all 
select iznos_sa_porezom as 'Duguje', '0.00' as 'Potražuje',
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN  from dbo.mp_ulazni_racun_roba_lista
where redni_broj  IS NOT NULL  group by iznos_sa_porezom
)
select  [Duguje], [Potražuje],
 (SELECT sum(Duguje-Potražuje) FROM cte t2 WHERE t2.RN <= cte.RN) AS Saldo
from cte

2 Ответов

Рейтинг:
20

Richard Deeming

Не совсем понятно, в чем проблема, но попробуйте:

WITH cteCombined As
(
    SELECT
        iznos_sa_porezom As [Duguje], 
        '0.00' as [Potražuje]
    FROM
        dbo.mp_ulazni_racun_ostalo_lista 
    WHERE
        redni_broj IS NOT NULL
    GROUP BY
        iznos_sa_porezom
    
    UNION ALL
    
    SELECT
        iznos_sa_porezom as [Duguje], 
        '0.00' as [Potražuje]
    FROM
        dbo.mp_ulazni_racun_roba_lista
    WHERE
        redni_broj IS NOT NULL
    GROUP BY
        iznos_sa_porezom
),
cte As
(
    SELECT
        [Duguje], 
        [Potražuje],
        ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN 
    FROM
        cteCombined
)
SELECT
    [Duguje], 
    [Potražuje],
    (SELECT SUM([Duguje] - [Potražuje]) FROM cte t2 WHERE t2.RN <= cte.RN) AS Saldo
FROM
    cte
;
В зависимости от ваших требований вам может потребоваться переместить GROUP BY от cteCombined к cte.


Goran Bibic

Спасибо

Maciej Los

5ed!

Рейтинг:
1

MadMyche

С этим было бы намного проще работать, если бы были некоторые примеры данных и ожидаемые результаты

Мне никогда по-настоящему не везло при совмещении UNION ALL с собой GROUP BY, и вообще разобьет его на несколько CTE.
Я бы начал с чего-то вроде этого и работал с теми данными, которые у вас есть, и с теми результатами, которые вы ожидаете, и с той работой, которая оттуда исходит.

; WITH cte1 AS (
	SELECT iznos_sa_porezom as 'Duguje'
             , '0.00' as 'Potražuje'
             ,  ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN
	FROM   dbo.mp_ulazni_racun_ostalo_lista 
	WHERE  redni_broj  IS NOT NULL
UNION ALL 
	SELECT iznos_sa_porezom as 'Duguje'
             , '0.00' as 'Potražuje'
             , ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RN
	FROM   dbo.mp_ulazni_racun_roba_lista
	WHERE  redni_broj  IS NOT NULL
	
)
; WITH cte2 AS (
	SELECT   Duguje, Potražuje, RN
	FROM     cte1
	GROUP BY Duguje
)

SELECT Duguje
,      Potražuje
,      Saldo = ( SELECT Sum(Duguje-Potražuje)
                 FROM   cte2 t2
                 WHERE  t2.RN <= cte.RN)
FROM   cte2


Maciej Los

5ed!

MadMyche

спасибо