عرض البيانات في خادم SQL بثلاثة جداول؟


شكرا للسيد ريتشارد ديمينج (

@RichardDeeming

) لتعطيني حلاً لمجموع جدولين.

ومع ذلك، لدي جدول به ناقص عمود، وهنا لا بد لي من محاولة حلها.

الجدول الأول “الوكيل”
اسم المال
احمد 600

الجدول الثاني “التصدير”
لا يوجد اسم التاريخ المال
1 25-1-2023 أحمد 700
2 30-6-2023 خالد 800
3 10-7-2023 أحمد 200
4 30-11-2023 أحمد 100

الجدول الثالث “الدفع”
لا يوجد اسم التاريخ المال
1 25-2-2023 أحمد 300
2 30-7-2023 خالد 800
3 15-8-2023 أحمد 300
4 25-12-2023 أحمد 400

أريد عرض الجدول مثل هذا:
|لا | التاريخ | الاسم | المجموع | تصدير | الدفع | RemaindMoney
|—|————–|——–|——-|——–|— ——|————-
| 0 | — | أحمد | 600 | 0 | 0 | 600
| 1 | ٢٥-١-٢٠٢٣ | أحمد | 600 | 700 | 0 | 1300
| 1 | ٢٥-٢-٢٠٢٣ | أحمد | 1300 | 0 | 300 | 1000
| 3 | ١٠-٧-٢٠٢٣ | أحمد | 1000 | 200 | 0 | 1200
| 3 | ١٥-٨-٢٠٢٣ | أحمد | 1200 | 0 | 300 | 900
| 4 | 30-11-2023 | أحمد | 900 | 100 | 0 | 1000
| 4 | ٢٥-١٢-٢٠٢٣ | أحمد | 1000 | 0 | 400 | 600

ما حاولت:

السيد ريتشارد ديمنج الحل لمجموع جدولين

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,
		CAST(D AS DATE) as DATE,
        N,
        FORMAT(OD, 'G29') AS MONEY,
		FORMAT(0, 'N2') AS Export,
		FORMAT(0, 'N2') AS Payment,
		'' AS NT
    FROM
        TBL_A
    
    UNION ALL
    
    SELECT
        INo As No,
		CAST(D AS DATE) 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,
		CAST(D AS DATE) 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 'ت',
	DATE AS 'التاريخ',
    N AS 'اسم',
    Money AS 'القديم',
	Export AS 'الصادر',
	Payment AS 'المدفوع',
    SUM((Money + Export) - Payment) OVER (PARTITION BY N ORDER BY No ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) As 'المتبقي',
	NT AS 'ملاحظات'
FROM
    NEWTABLE
WHERE N = N'AnyName' ORDER BY DATE ASC
;

コメント

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