簡體   English   中英

復雜JOIN查詢SQL服務器

[英]Complex JOIN query SQL Server

我有兩張桌子,一種'父母','孩子',如下所示:

父子表

我現在需要加入這兩個表。 滿足連接的要求

  1. 如果第一個表的 ID 與第二個表的 ID 匹配
  2. 第一個表的 CHILDID 與第二個表的 ID 匹配
  3. Child 表的 EffectiveDate(其 ID 與父表的 ID 匹配)應等於子表的 EffectiveDate(其 ID 與父表的 ChildID 匹配)

(在上圖中,匹配的行以紅色和綠色突出顯示以說明上述情況)。

因此,生成的查詢應顯示以下行:

查詢結果

將不勝感激有關如何達到預期結果的任何指示。 謝謝!

好吧,這實際上比我最初想象的要奇怪,但我認為這就是你想要的。 這可能不是獲得結果的最干凈的方法,但它是一個開始?

DECLARE @parent TABLE (ROWID INT, ID INT, CHILDID INT, FLAG CHAR(1));
INSERT INTO @parent
SELECT 1, 10, 1000, 'A'
UNION ALL
SELECT 2, 10, 1001, 'A'
UNION ALL
SELECT 3, 10, 1002, 'A'
UNION ALL
SELECT 4, 11, 1005, 'A'

DECLARE @child TABLE (ROWID INT, ID INT, EFFECTIVEDATE DATETIME, SHARES INT);
INSERT INTO @child
SELECT 2, 10, '20010101 00:00', 20
UNION ALL
SELECT 1, 11, '20020101 00:00', 60
UNION ALL
SELECT 3, 1000, '20010101 00:00', 30
UNION ALL
SELECT 4, 1005, '20020101 00:00', 50
UNION ALL
SELECT 5, 1005, '20040101 00:00', 90;

SELECT DISTINCT
    c1.*
FROM 
    @child c1
    INNER JOIN @parent p1 ON p1.ID = c1.ID
    INNER JOIN @child c2 ON c2.ID = p1.CHILDID
WHERE
    c2.EFFECTIVEDATE = c1.EFFECTIVEDATE
UNION ALL
SELECT DISTINCT
    c2.*
FROM 
    @child c1
    INNER JOIN @parent p1 ON p1.ID = c1.ID
    INNER JOIN @child c2 ON c2.ID = p1.CHILDID
WHERE
    c2.EFFECTIVEDATE = c1.EFFECTIVEDATE
ORDER BY
    1;

結果:

ROWID   ID      EFFECTIVEDATE           SHARES
1       11      2002-01-01 00:00:00.000 60
2       10      2001-01-01 00:00:00.000 20
3       1000    2001-01-01 00:00:00.000 30
4       1005    2002-01-01 00:00:00.000 50

是的,那些DISTINCT可能是矯枉過正?

暫無
暫無

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

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