首页 > 解决方案 > SQL-Server 在另一个表中向下钻取(分组依据)

问题描述

好的,我对 SQL 很陌生,没有接受太多培训!

我正在使用 SSMS 创建存储过程并在 Excel 中打开它们。

下面的代码工作得很好,但我需要添加一个向下钻取以获取有关某些行的更多信息。

我们需要遵循我们项目的一批合同的发票和付款。每份合同都有多行描述和几个其他字段(参考、行#、总帐#等)。此外,我们还有该行的价值、该行的发票金额和已支付的金额。

主表“CSCOMVTL”包含基本信息,包括基值和发票金额,但不包含支付金额。

'JRAPRVTL' 是所有发票的清单;我们可能需要查看的发票编号、发票日期、发票金额和支付金额。

因此,对于每个基线,我们需要一个 +/- 按钮来显示/隐藏发票的详细信息。

发票金额和支付金额可能来自汇总,但数字和日期不会出现在父行上。如果它们可以与不需要的其他字段位于同一列中,那就太好了,但我可以忍受 2 个额外的列。

谢谢!

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

标签: sqlsql-servergroup-bydrilldown

解决方案


首先,花时间学习 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 中尝试执行的操作,因为您确实没有为此付出太多努力。


推荐阅读