Использование подзапросов "Stuff", "For XML Path" в объединенном представлении - PullRequest
0 голосов
/ 18 июня 2019

У меня SQL View, который показывает Штрих-код (k.t_cbcde), номер доставки (k.t_dino), номер квитанции (k.t_rcno), номер поставщика (k.t_sfbp), квитанция (k.t_crdt) и порядковый номер (c.t_orno).

Может быть несколько порядковых номеров для одного номера квитанции и несколько номеров квитанции для одного штрих-кода.

Включенные таблицы: dbo.twhinh310101 with alias k dbo.twhinh312101 with alias c

Это простое объединение, которое показывает следующие результаты:

k.t_cbcde as Barcodenumber, k.t_dino as Deliverynotenumber, k.t_rcno as Receiptnumber, k.t_sfbp as Suppliernumber, k.t_crdt as Receiptdate,
c.t_orno as Ordernumber

from
dbo.twhinh310101 k
left join  dbo.twhinh312101 as c
on c.t_rcno = k.t_rcno


where k.t_cbcde = '0143797546'

Я использую Barcodenumber 0143797546 в качестве примера.

Это результат этого запроса: результат 01

Цель состоит в том, чтобы номера квитанций и все квитанции были в одной строке. Вот так:

result03

Я уже написал Query, но он не работает должным образом:

SELECT DISTINCT sub
Barcodenumber,
Delieverynotenumber,
Receiptnumber,
Suppliernumber,
Receiptdate,
Ordernumber 
= STUFF (
    (SELECT ',' + t_orno
    FROM dbo.twhinh312101 a, 
    WHERE (what to use here?)
    GROUP BY t_orno
    ORDER BY t_orno ASC
    FOR XML PATH ('')), 1, 1, '')

FROM (

SELECT DISTINCT 
    k2.t_cbcde AS Barcodenumber,
    k2.t_dino AS Delieverynotenumber,
    Receiptnumber
    = STUFF (
        (SELECT ',' + t_rcno
         FROM dbo.twhinh310101 k1
         WHERE k1.t_cbcde = k2.t_cbcde
         GROUP BY t_rcno
         ORDER BY t_rcno ASC
         FOR XML PATH ('')), 1, 1, ''
         ),
    k2.t_sfbp AS Suppliernumber, 
    k2.t_crdt AS Receiptdate,
    t_orno = STUFF (
        (SELECT  ',' + t_orno 
         FROM dbo.twhinh312101
         WHERE t_rcno = k2.t_rcno
         GROUP BY t_orno
         ORDER BY t_orno ASC
         FOR XML PATH ('')), 1, 1, ''
        )

    FROM
    dbo.twhinh310101 k2
    left join  dbo.twhinh312101 AS c ON c.t_rcno = k2.t_rcno

    where k2.t_cbcde = '0143797546'

    )sub

Я ценю любую помощь:)

вот первые десять строк двух таблиц: Таблица слишком велика для текстового редактора, поэтому я использую картинки

dbo.twhinh310101 dbo.twhinh312101

Если вам нужна дополнительная информация, просто дайте мне знать:)

Я добавил две таблицы в sqlfiddel: http://sqlfiddle.com/#!18/153bb0/3

Надеюсь, это поможет

...