mssql и оставил объединить дубликаты записей - PullRequest
0 голосов
/ 06 февраля 2019

Оригинальный запрос

SELECT DISTINCT
      IP.op_code as ip_op_code,
      IPH.op_code as iph_op_code,
      debt_trans.tx_amount as cash,
      DT.tx_amount as revenue
    FROM debt_trans
    LEFT JOIN debt_trans DT ON DT.debt_code=debt_trans.debt_code
    LEFT JOIN instplan IP ON IP.debt_code=debt_trans.debt_code
    LEFT JOIN instplanheader IPH ON IPH.debt_code=debt_trans.debt_code

    AND debt_trans.tran_code NOT IN ('DR3001','DR3002','DR3003','DR3004','RP1800','CC5000')
    AND debt_trans.tx_amount > 0
    AND debt_trans.tx_date >= '2019-02-04' AND debt_trans.tx_date <= '2019-02-04'

    AND IP.ipactualpaymentamt > 0
    AND IP.tran_code NOT IN ('DR3001','DR3002','DR3003','DR3004','RP1800','CC5000')
    AND IP.ipactualpaymentdt >= '2019-02-04' AND IP.ipactualpaymentdt <= '2019-02-04'
    AND (IP.ipactualpaymentdt+debt_trans.tx_time)=(debt_trans.tx_date+debt_trans.tx_time)

    AND DT.tran_code IN ('CC5000')
    AND DT.tx_amount > 0.00
    AND DT.tx_date >= '2019-02-04' AND DT.tx_date <= '2019-02-04'

    AND DT.tx_date=debt_trans.tx_date
    AND DT.tx_time=debt_trans.tx_time

    AND IPH.ipplanid=IP.ipplanid

Результаты вывода

Row Count : 4

[0] => Array
    (
        [ip_op_code] => DOMP
        [iph_op_code] => DOMP
        [cash] => 5.00
        [revenue] => 2.25
    )

[1] => Array
    (
        [ip_op_code] => DOMP
        [iph_op_code] => DOMP
        [cash] => 671.00
        [revenue] => 301.95
    )

[2] => Array
    (
        [ip_op_code] => RHYSL
        [iph_op_code] => RHYSL
        [cash] => 5.00
        [revenue] => 2.25
    )

[3] => Array
    (
        [ip_op_code] => RHYSL
        [iph_op_code] => RHYSL
        [cash] => 671.00
        [revenue] => 301.95
    )

Ожидаемые результаты

Количество строк: 2

[0] => Array
    (
        [ip_op_code] => DOMP
        [iph_op_code] => DOMP
        [cash] => 5.00
        [revenue] => 2.25
    )

[1] => Array
    (
        [ip_op_code] => RHYSL
        [iph_op_code] => RHYSL
        [cash] => 671.00
        [revenue] => 301.95
    )

Я сейчас добавилполный правильный запрос, который я пытаюсь сделать, не могли бы вы попытаться помочь мне в этом.

У меня есть 3 таблицы.

debt_trans instplan instplanheader

и мне нужно присоединиться к debt_transснова, так как мне нужно получить следующий ряд.

кажется, что все идет к поту, когда я присоединяюсь к instplan и instplanheader

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

просмотр ваших данных, к которым вы можете присоединиться, должен совпадать и для op_code AND instplanheader.op_code = instplan.op_code

$sql = "SELECT DISTINCT
      instplan.debt_code,
      instplan.op_code,
      instplanheader.op_code as plan_op,
      instplan.ipactualpaymentamt
    FROM instplanheader
    LEFT JOIN instplan ON instplanheader.debt_code=instplan.debt_code

        AND instplanheader.op_code = instplan.op_code 

        AND instplan.tran_code NOT IN ('DR3001','DR3002','DR3003','DR3004')
        AND instplan.ipactualpaymentamt > 0.00
        AND instplan.ipactualpaymentdt >= '2019-02-04' AND instplan.ipactualpaymentdt <= '2019-02-04'
          AND instplanheader.iphcreationdate >= '2018-12-01' AND instplanheader.iphcreationdate <= '2019-02-04'
    ";
0 голосов
/ 06 февраля 2019

Это кажется мне бессмысленным прикосновением:

        AND i.ipactualpaymentdt >= '2019-02-04' 
        AND i.ipactualpaymentdt <= '2019-02-04'
0 голосов
/ 06 февраля 2019

Это означает, что ваша правая таблица instplan имеет несколько строк с одинаковыми debt_code.

Позвольте мне показать, что я имею в виду:

DECLARE @TestTable TABLE 
(
    Col1 VARCHAR(10),
    Col2 INT,
    Col3 INT
)    
DECLARE @TestTable2 TABLE 
(
    Col1 VARCHAR(10),
    Col2 VARCHAR(10),
    Col3 VARCHAR(10)
)


INSERT INTO @TestTable
(
    Col1,
    Col2,
    Col3
)
VALUES
 ('A',         10,       20)    
 INSERT INTO @TestTable2
(
    Col1,
    Col2,
    Col3
)
VALUES
   ('A',         'A',       'A')
 , ('A',         'B',       'B')
 , ('A',         'C',       'C')

И пример запроса:

SELECT 
  distinct t1.Col1 t1_Col
, t2.Col1 t2_Col1
, t2.Col2 t2_Col2
, t2.Col3 t2_Col3
FROM @TestTable t1 
LEFT JOIN @TestTable2 t2 ON t2.Col1 = t1.Col1

Тем не менее, мы видим три строки, хотя используем ключевое слово DISTINCT.

ВЫХОД:

t1_Col  t2_Col1 t2_Col2 t2_Col3
A          A       A       A 
A          A       B       B
A          A       C       C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...