簡體   English   中英

SQL 新手 - 如何比較兩組連接表中的數據

[英]New to SQL - How to compare data from two sets of joined tables

我正在嘗試將一組多個表與 SQL 數據庫中的另一組多個表進行比較。 誠然,我對 SQL 非常陌生,所以如果我的術語不正確,請原諒我。

我的數據庫中有 6 個單獨的表。 其中3個是當月數據,另外3個是上月數據。 我需要生成一個顯示當月數據的報告,但還要將帳戶余額與上個月進行比較 - 我需要創建一個列,根據帳戶余額是否匹配列出“真”或“假”。

我將當月的三個數據表連接在一起,並將上個月的三個數據表連接在一起。

兩組表是相同的。 以下是表的描述 - 一組以“CURRENT”為前綴,一組以“PRIOR”為前綴:

BALANCE:
    EntityID
    AccountID
    AccountBalance

ENTITY:
    ID
    Label
    Description

ACCOUNT:
    ID
    AccountNumber
    Description

我需要提供的報告應該從當月的數據中列出以下內容:

Label     
Description 
AccountNumber   
AccountDescription  
AccountBalance  

我需要在報告末尾添加一個名為“已更改”的列。 此列應具有“真”或“假”值,具體取決於當前和先前帳戶余額是否匹配。

到目前為止,我只能加入表格。 我不確定如何編輯此查詢以將當前月份的 dbo.CURRENT_BALANCE.AccountBalance 與上個月的 dbo.PRIOR_BALANCE.AccountBalance 進行比較

SELECT DISTINCT 
    dbo.CURRENT_ENTITY.Label, 
    dbo.CURRENT_ENTITY.Description AS Entity, 
    dbo.CURRENT_ACCOUNT.AccountNumber, 
    dbo.CURRENT_ACCOUNT.Description AS AccountDescription, 
    dbo.CURRENT_BALANCE.GLAccountBalance
FROM     
    dbo.CURRENT_BALANCE 
    INNER JOIN dbo.CURRENT_ENTITY ON dbo.CURRENT_BALANCE.EntityID = dbo.CURRENT_ENTITY.ID 
    INNER JOIN dbo.CURRENT_ACCOUNT ON dbo.CURRENT_BALANCE.AccountID = dbo.CURRENT_ACCOUNT.ID 
    CROSS JOIN dbo.PRIOR_BALANCE 
    INNER JOIN dbo.PRIOR_ENTITY ON dbo.PRIOR_BALANCE.EntityID = dbo.PRIOR_ENTITY.ID 
    INNER JOIN dbo.PRIOR_ACCOUNT ON dbo.PRIOR_BALANCE.AccountID = dbo.PRIOR_ACCOUNT.ID

上面的查詢返回我的預期結果:

Label   Entity                      AccountNumber   AccountDescription  AccountBalance
21      Company ABC                 1               Customer Sales      25
21      Company ABC                 2               Customer Sales      568
22      XYZ Solutions               3               Vendor Sales        344
23      Number 1 Products           4               Vendor Sales        565
24      Enterprise Inc              5               Wholesale           334
24      Enterprise Inc              6               Wholesale           5452
24      Enterprise Inc              7               Wholesale           5877
26      QWERTY Solutions            8               Customer Sales      456
27      Acme                        9               Customer Sales      752
28      United Product Solutions    10              Vendor Sales        87

我想要做的是得到類似於:

Label   Entity                      AccountNumber   AccountDescription  AccountBalance  Changed
21      Company ABC                 1               Customer Sales      25              FALSE
21      Company ABC                 2               Customer Sales      568             FALSE
22      XYZ Solutions               3               Vendor Sales        344             FALSE
23      Number 1 Products           4               Vendor Sales        565             FALSE
24      Enterprise Inc              5               Wholesale           334             TRUE
24      Enterprise Inc              6               Wholesale           5452            FALSE
24      Enterprise Inc              7               Wholesale           5877            TRUE
26      QWERTY Solutions            8               Customer Sales      456             FALSE
27      Acme                        9               Customer Sales      752             FALSE
28      United Product Solutions    10              Vendor Sales        87              FALSE

我不知道從這里去哪里。 非常感謝這個小組的任何建議!

下面應該作為比較這兩個值的一種方式。 我為表名添加了別名以幫助閱讀;

    SELECT DISTINCT 
     ce.Label
    ,ce.Description AS Entity
    ,ca.AccountNumber
    ,ca.Description AS AccountDescription
    ,cb.GLAccountBalance
    ,CASE
            WHEN cb.GLAccountBalance = p.PriorBalance THEN 'False'
            WHEN cb.GLAccountBalance <> p.PriorBalance THEN 'True'
        END AS [Changed]
    FROM dbo.CURRENT_BALANCE cb
    INNER JOIN dbo.CURRENT_ENTITY ce ON cb.EntityID = ce.ID 
    INNER JOIN dbo.CURRENT_ACCOUNT ca ON cb.AccountID = ca.ID 
    LEFT JOIN ( SELECT DISTINCT 
                 pe.ID AS PE_ID
                ,pa.ID AS PA_ID
                ,pb.GLAccountBalance AS PriorBalance
                FROM dbo.PRIOR_BALANCE pb
                INNER JOIN dbo.PRIOR_ENTITY pe ON pb.EntityID = pe.ID 
                INNER JOIN dbo.PRIOR_ACCOUNT pa ON pb.AccountID = pa.ID 
            ) p ON p.PE_ID = ce.ID AND p.PA_ID = ca.ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM