2016-11-04 4 views
0

Ich bin neu in SQL und ich hatte gehofft, jemand von Ihnen könnte mir helfen. Ich habe diese beiden Abfragen, die ich in zwei verschiedene Spalten in der gleichen Tabelle einfügen möchte (wenn das überhaupt möglich ist).Mehrere SQL-Abfragen in einer einzigen Tabelle

Beispieldaten:

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 

Erwartete Ergebnisse:

BP Name 2016   BP Name 2015 
F      C 
G      D 
         E 

erste Abfrage (siehe Spalte „Actual Jahr)

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 

zweite Abfrage (würde Spalte sein "Voriges Jahr")

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

Welche Daten u haben, und was ist Ihre erwartete Ergebnis – Mansoor

+1

Bearbeiten Sie Ihre Frage. (1) Tag mit der von Ihnen verwendeten Datenbank (SQL Server?) (2) Beispieldaten; (3) Gewünschte Ergebnisse. Und ich sehe keinen Unterschied zwischen den Abfragen. –

+0

Warum möchten Sie, dass es in SQL so dargestellt wird? Im Allgemeinen sollten Sie sich keine Gedanken über die Darstellung in Ihrer SQL-Abfrage machen. Wenn dies nur aus Präsentationsgründen ist, dann führen Sie einfach eine (einzelne) Abfrage durch, die alle Ihren BP-Namen und das entsprechende Jahr (2015, 2016) extrahiert und dann Ihre Präsentationsschicht so arrangieren lässt. Wenn es nicht wegen der Präsentation ist, dann lösen Sie wahrscheinlich gerade das falsche Problem. –

Antwort

0

Sie können vollständige äußere JOIN Ihr Problem zu beheben, wie unten:

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# 
Verwandte Themen