繁体   English   中英

单个表中的多个SQL查询

[英]Multiple SQL queries in a single table

我是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

您可以使用完全外部联接来解决您的问题,如下所示:

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#

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM