2016-11-04 126 views
0

我是SQL新手,希望有人能幫助我。 我有兩個查詢,我想把兩個不同的列放在同一個表中(如果甚至可能的話)。單個表中有多個SQL查詢

的樣本數據:

BP Name  Disbursment Date 
A   2013   
B   2013 
C   2015 
A   2015 
B   2016 
D   2015 
D   2016 
E   2015 
E   2016 
F   2016 
G   2016 

預期結果:

BP Name 2016   BP Name 2015 
F      C 
G      D 
         E 

首先查詢(列「實際年化)

SELECT DISTINCT t."BP Name" 
FROM ( SELECT 
      "BP Name", 
      "Disbursment Date" 
    FROM "SB_MD" 
    WHERE year("Disbursment Date") = Year(getdate()) 
) t LEFT JOIN( SELECT "BP Name" 
    FROM "SB_MD" 
    WHERE year("Disbursment Date") < year(getdate()) 
) t1 ON t."BP Name" = t1."BP Name" 
WHERE t1."BP Name" is null 

第二個查詢(將柱 「上一年度」)

SELECT DISTINCT t."BP Name" 
FROM ( SELECT 
      "BP Name", 
      "Disbursment Date" 
    FROM "SB_MD" 
    WHERE year("Disbursment Date") = (Year(getdate()) -1) 
) t LEFT JOIN( SELECT "BP Name" 
    FROM "SB_MD" 
    WHERE year("Disbursment Date") < (year(getdate()) -1) 
) t1 ON t."BP Name" = t1."BP Name" 
WHERE t1."BP Name" is null 
+2

u有什麼數據,什麼是您預期的結果 – Mansoor

+1

編輯你的問題。 (1)使用您正在使用的數據庫進行標記(SQL Server?)(2)示例數據; (3)期望的結果。而且,我沒有看到這些查詢之間的區別。 –

+0

爲什麼你希望它像SQL一樣呈現?一般來說,你不應該擔心你的SQL查詢中的表示。如果這純粹是出於表達原因,那麼只需執行一次(單個)查詢即可提取所有BP名稱和相應的年份(2015,2016),然後讓表示層對其進行排列。如果不是因爲介紹,那麼你現在可能就解決了錯誤的問題。 –

回答

0

你可以使用全外連接,以解決您的問題如下:

SELECT A1.[BP Name] AS 'BP NAME 2016',B1.[BP Name] AS 'BP NAME 2015' 
FROM 
(
    SELECT 
     ROW_NUMBER() OVER(ORDER BY [BP Name] ASC) AS Row#, [BP Name] 
    FROM 
    (
     SELECT DISTINCT t."BP Name" 
     FROM ( SELECT 
       "BP Name", 
       "Disbursment Date" 
        FROM "SB_MD" 
      WHERE year("Disbursment Date") = Year(getdate() 
     )) t 
     LEFT JOIN( SELECT "BP Name" 
      FROM "SB_MD" 
      WHERE year("Disbursment Date") < year(getdate()) 
     ) t1 ON t."BP Name" = t1."BP Name" 
     WHERE t1."BP Name" is null 
    ) A 
) A1 
FULL OUTER JOIN 
(
    SELECT 
     ROW_NUMBER() OVER(ORDER BY [BP Name] ASC) AS Row#, [BP Name] 
    FROM 
    (
     SELECT DISTINCT t."BP Name" 
     FROM ( SELECT 
      "BP Name", 
      "Disbursment Date" 
      FROM "SB_MD" 
      WHERE year("Disbursment Date") = (Year(getdate()) -1)) t 
     LEFT JOIN( SELECT "BP Name" 
      FROM "SB_MD" 
      WHERE year("Disbursment Date") < (year(getdate()) -1) 
      ) t1 ON t."BP Name" = t1."BP Name" 
     WHERE t1."BP Name" is null 
    ) B 
) B1 ON A1.ROW# = B1.ROW#