在SQL Server中用三个表显示数据?


感谢理查德·戴明先生(

@RichardDeeming

)给我两个表求和的解决方案。

但是,我有一个表,其中减去一列,在这里我必须尝试解决它。

表一“代理”
姓名 钱
艾哈迈德 600

表二“导出”
无日期 姓名 金钱
1 2023 年 1 月 25 日 艾哈迈德 700
2 2023年6月30日 卡立 800
3 10-7-2023 艾哈迈德 200
4 2023 年 11 月 30 日 艾哈迈德 100

表三“付款”
无日期 姓名 金钱
1 2023 年 2 月 25 日 艾哈迈德 300
2 2023年7月30日 卡立 800
3 2023年8月15日 艾哈迈德 300
4 2023年12月25日 艾​​哈迈德 400

我想像这样显示表格:
|没有| 日期 | 名称 | 总计 | 出口| 付款| 剩余资金
|—|————–|———|——–|——–|— ——|————–
| 0 | –| 艾哈迈德 | 600 | 0 | 0 | 600
| 1 | 2023 年 1 月 25 日 | 艾哈迈德 | 600 | 700 | 0 | 1300
| 1 | 2023 年 2 月 25 日 | 艾哈迈德 | 1300 | 1300 0 | 300 | 300 1000
| 3 | 2023 年 10 月 7 日 | 艾哈迈德 | 1000 | 1000 200 | 200 0 | 1200
| 3 | 2023 年 8 月 15 日 | 艾哈迈德 | 1200 | 1200 0 | 300 | 300 900
| 4 | 2023 年 11 月 30 日 | 艾哈迈德 | 900 | 900 100 | 100 0 | 1000
| 4 | 2023 年 12 月 25 日 | 艾哈迈德 | 1000 | 1000 0 | 400 | 600

我尝试过的:

Rechard Demming 先生 两个表求和的解决方案

WITH cteSource As
(
    SELECT
        0 As No,
        Name,
        Money
    FROM
        TableOne
    
    UNION ALL
    
    SELECT
        No,
        Name,
        Money
    FROM
        TableTwo As T2
    WHERE
        Exists
        (
            SELECT 1
            FROM TableOne As T1
            WHERE T1.Name = T2.Name
        )
)
SELECT
    No,
    Name,
    Money,
    SUM(Money) OVER (PARTITION BY Name ORDER BY No ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) As TotalMoney
FROM
    cteSource
;

解决方案1

谢谢大家,特别是

Mr. Rechard Demming

,不过,我得到了另一个解决方案。

我解决了我的问题,这里是添加其他表和列后的代码:

WITH NEWTABLE AS
(
    SELECT
        0 As No,
		D AS DATE,
        N,
        OD AS MONEY,
		0  AS Export,
		0  AS Payment,
		'' AS NT
    FROM
        TBL_A
    
    UNION ALL
    
    SELECT
        INo As No,
		D AS DATE,
        N,
		0 AS MONEY,
		T AS Export,
		0 AS Payment,
		'صادر' AS NT
    FROM
        TBL_E_I As T2
	WHERE
        Exists
        (
            SELECT 1
            FROM TBL_A As T1
            WHERE T1.N = T2.N
        )

	UNION ALL

	SELECT
		No AS No,
		D AS DATE,
		N,
		0 AS MONEY,
		0 AS Export,
		PD AS Payment,
		'دفع' AS NT
	FROM
		TBL_A_P AS T3

    WHERE
        Exists
        (
            SELECT 1
            FROM TBL_A As T1
            WHERE T1.N = T3.N
        )
)
SELECT
    No AS 'ت',
	CAST(DATE AS DATE) AS 'التاريخ',
    N AS 'اسم',
    FORMAT(Money, 'G29') AS 'القديم',
	FORMAT(Export, 'G29') AS 'الصادر',
	FORMAT(Payment, 'G29') AS 'المدفوع',
    FORMAT(SUM((Money + Export) - Payment) OVER (PARTITION BY N ORDER BY No ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW), 'G29') As 'المتبقي',
	NT AS 'ملاحظات'
FROM
    NEWTABLE
WHERE N = N'كريمينيا' ORDER BY DATE ASC
;

无日期名称旧出口付款剩余货币票据
剩余付款票据 旧名称 日期 T

No	Date	Name	Total	Export	Payment	RemaindMoney
ملاحظات     المتبقي      المدفوع    الصادر   القديم     الاسم    التاريخ    ت
0	25-1-2023	Ahmed	600	    0	    0	    600     قديم
1	25-1-2023	Ahmed	0	    700	    0	    1300    صادر
1	25-2-2023	Ahmed	0       0   	300 	1000    دفع
3	10-7-2023	Ahmed	0       200 	0   	1200    صادر
3	15-8-2023	Ahmed	0       0	    300 	900     دفع
4	30-11-2023	Ahmed	0       100 	0   	1000    صادر
4	25-12-2023	Ahmed	0       0   	400 	600     دفع

任何人都可以帮助我得到这样的解决方案:

No	Date	Name   Money	Export	Payment	RemaindMoney
ملاحظات     المتبقي      المدفوع    الصادر   القديم     الاسم    التاريخ    ت
0	25-1-2023	Ahmed	600	    0	    0	    600     قديم
1	25-1-2023	Ahmed	0	    700	    0	    1300    صادر
1	25-2-2023	Ahmed	0       0   	300 	1000    دفع
3	10-7-2023	Ahmed	0       200 	0   	1200    صادر
3	15-8-2023	Ahmed	0       0	    300 	900     دفع
4	30-11-2023	Ahmed	0       100 	0   	1000    صادر
4	25-12-2023	Ahmed	0       0   	400 	600     دفع

コメント

タイトルとURLをコピーしました