【解決方法】3 つのテーブルを含む SQL サーバーのデータを表示しますか?


リチャード・デミング氏に感謝します (

@RichardDeeming

) 2 つのテーブルの合計の解を与えます。

ただし、列をマイナスするテーブルがあるので、ここでそれを解決してみる必要があります。

表 1「エージェント」
名前のお金
アーメド 600

表 2 「エクスポート」
日付なし 名前 金額なし
1 2023 年 1 月 25 日 アヘムド 700
2 2023 年 6 月 30 日 ハリド 800
3 2023 年 7 月 10 日 アハメッド 200
4 2023 年 11 月 30 日 アーメド 100

表 3「支払い」
日付なし 名前 金額なし
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 | 0 | 300 | 1000
| 3 | 2023 年 7 月 10 日 | アーメド | 1000 | 200 | 0 | 1200
| 3 | 2023 年 8 月 15 日 | アーメド | 1200 | 0 | 300 | 900
| 4 | 2023 年 11 月 30 日 | アーメド | 900 | 100 | 0 | 1000
| 4 | 2023 年 12 月 25 日 | アーメド | 1000 | 0 | 400 | 600

私が試したこと:

Rechard Demming 氏 2 つの合計テーブルの解決策

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 'المدفوع',
    SUM((MONEY + Export) - Payment) OVER (PARTITION BY N ORDER BY DATE ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) 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をコピーしました