[英]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.