2016-11-04 6 views
0

私はSQLを初めて使用しています。あなたからの誰かが私を助けてくれることを願っていました。 2つの異なる列に同じテーブル内に入れたいという2つのクエリがあります(それが可能であれば)。単一のテーブル内で複数の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 

2番目のクエリ(列になり、 "前の年")

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# 
関連する問題