Развернуть SQL-сервер в другой таблице (по группам) - PullRequest
0 голосов
/ 25 января 2019

ОК, я довольно новичок в SQL и не получил много обучения!

Я использую SSMS для создания хранимых процедур и открытия их в Excel.

Код ниже работает просто отлично, но мне нужно добавить детализацию, чтобы получить больше информации о некоторых строках.

Мы должны следовать тому, что было выставлено и оплачено партией контрактов для нашего проекта. Каждый контракт имеет несколько строк с описанием и несколько других полей (ссылка, строка #, G / L # и т. Д.). Кроме того, у нас есть значение строки, сумма, по которой был выставлен счет для этой строки, и сумма, которая была выплачена.

Основная таблица «CSCOMVTL» содержит основную информацию, включая базовую стоимость и сумму счета, но не оплаченную сумму.

'JRAPRVTL' - список всех счетов с; номер счета-фактуры, дата счета-фактуры, сумма счета-фактуры и оплаченная сумма, которые нам, возможно, понадобится увидеть.

Таким образом, для каждой базовой линии нам нужна кнопка +/-, чтобы показать / скрыть детали счета.

Сумма счета и оплаченная сумма могут быть получены в результате накопления, но номер и дата не будут указаны в родительской строке. Если бы они могли находиться в том же столбце, что и другие ненужные поля, это было бы здорово, но я мог бы жить с двумя дополнительными столбцами.

Спасибо!

ALTER PROCEDURE [dbo].[marpt_qmd_AccPmt_DetailsST]
@contrat varchar(30), @projet varchar(30)

AS
BEGIN
CREATE TABLE #RPT
(
    Ligne INT,
    Lien INT,
    Act VARCHAR (10),
    Descr VARCHAR (90),
    MntBase DECIMAL (20,2),
    MntFact DECIMAL (20,2),
    Modif VARCHAR (40),
    Descr3 VARCHAR (90),
    Lien2 INT,
    MntPy DECIMAL (20,2) default '0',


)

INSERT INTO #RPT (Ligne, Lien, Act, Descr, MntBase, MntFact)
SELECT ROW, DETAILCHANGEORDERCOU, ACTIVITY, DESCRIPTION, AMOUNT, INVOICE
FROM cscomvtl
WHERE PROJECTNUMBER = @projet
and LTRIM(RTRIM(PONUMBER)) = @contrat

UPDATE #RPT
SET Modif=m.CHANGEORDERNUMBER, Descr3=m.DESCRIPTION, Lien2=m.CHANGEORDERCOUNTER
FROM cscomac m, #RPT r
where m.COUNTER=r.Lien

UPDATE #RPT
SET MntPy=payment
FROM #RPT r, (select POLINE, sum(payment) payment from jraprvtl where PROJECTNO=@projet
and LTRIM(RTRIM(PURCHASEORDER))=@contrat group by POLINE) d
where r.Ligne=d. POLINE

SELECT 
    Ligne as 'Ligne',
    Act as 'Act.',
    Descr as 'Description 1',
    MntBase as '$ Base',
    MntFact as '$ Invoiced',
    Modif as 'Num. Modif.',
    Descr3 as 'Description 2',
    MntPy as '$ Paid'
    FROM #RPT
    Order by Ligne


Drop table #RPT

1 Ответ

0 голосов
/ 25 января 2019

Прежде всего, найдите время и изучите SQL.Это бесценный инструмент в вашем наборе!Хорошо, достаточно лекции.При просмотре вашего кода вам, похоже, не нужна временная таблица #rpt, вам просто нужно понимать JOIN.Надеемся, что этот SQL даст вам то, что вы ищете:

SELECT  vtl.ROW AS Ligne, vtl.DETAILCHANGEORDERCOU AS Lein, vtl.ACTIVITY AS Act, 
        vtl.DESCRIPTION AS Descr, vtl.AMOUNT AS MntBase, vtl.INVOICE AS MntFact,
        mac.CHANGEORDERNUMBER AS Modif, mac.DESCRIPTION AS Descr3, mac.CHANGEORDERCOUNTER AS Lien2,
        sum(jrap.payment) AS MntPy
FROM    cscomvtl AS vtl
        LEFT OUTER JOIN cscomac AS mac
            ON vtl.detailchangeordercou = mac.counter
        LEFT OUTER JOIN jraprvtl AS jrap
            ON vtl.row = jrap.poline
WHERE   projectnumber = @projet AND LTRIM(RTRIM(ponumber)) = @contrat
GROUP BY vtl.row, vtl.detailchangeordercou, vtl.activity, vtl.description, vtl.amount, 
         vtl.invoice, mac.changeordernumber, mac.description, mac.changeordercounter

Скорее всего, вам придется настроить его так, чтобы он соответствовал тому, что вы пытаетесь сделать в Excel, так как вы действительно мало что дали.там.

...