Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 向右联接添加其他条件_Sql_Sql Server_Reportbuilder - Fatal编程技术网

Sql 向右联接添加其他条件

Sql 向右联接添加其他条件,sql,sql-server,reportbuilder,Sql,Sql Server,Reportbuilder,这是我在这个论坛上的第一篇帖子,我对SQL非常陌生,所以请容忍我 我试图修改一些现有的脚本,对一个报告做一个小的修改,使它稍微更适合最初由开发人员编写的用途 本报告旨在了解每个月是否有三个实体的两个特定文件被读入数据库,或者它们是否丢失 输出如下所示: 归档 YYYY:MM:DD A缺失 B失踪 C缺失 YYYY:MM:DD礼物 B失踪 C现在 脚本是这样的,除了上一年12月的文件外,只查找当前年份的文件,但是我还想显示上一年10月和11月的结果 以下是脚本的相关部分: select disti

这是我在这个论坛上的第一篇帖子,我对SQL非常陌生,所以请容忍我

我试图修改一些现有的脚本,对一个报告做一个小的修改,使它稍微更适合最初由开发人员编写的用途

本报告旨在了解每个月是否有三个实体的两个特定文件被读入数据库,或者它们是否丢失

输出如下所示:

归档 YYYY:MM:DD A缺失 B失踪 C缺失 YYYY:MM:DD礼物 B失踪 C现在 脚本是这样的,除了上一年12月的文件外,只查找当前年份的文件,但是我还想显示上一年10月和11月的结果

以下是脚本的相关部分:

select distinct(k.filedate) as filedate, k.fid, case when r.fundid is null then 0 else 1 end as present     
from XXXX database      
right join      
(       
    select convert(date,convert(varchar, year(@ReportDate) - 1) + '-12-01') as filedate, g.fid  
    from (  
        select 'XXXXFDGBP10' as fid
        union
        select 'XXXXUSD10' as fid
        union
        select 'XXXXUSD10' as fid
        union
        select 'XXXXA10' as fid
        union
        select 'XXXXB10' as fid
        union
        select 'XXXXGBPMGMT10' as fid
        union
        select 'XXXXMGMTSH10' as fid
    ) g 

    union   

    select convert(date,convert(varchar, year(@ReportDate)) + '-' + convert(varchar, h.m) + '-01') as filedate, s.fid   
    from (  
        select 'XXXXFDGBP10' as fid
        union
        select 'XXXXUSD10' as fid
        union
        select 'XXXXUSD10' as fid
        union
        select 'XXXXA10' as fid
        union
        select 'XXXXB10' as fid
        union
        select 'XXXXGBPMGMT10' as fid
        union
        select 'XXXXMGMTSH10' as fid
    ) s,    
    (   
        select 1 as m
        union
        select 2 as m
        union
        select 3 as m
        union
        select 4 as m
        union
        select 5 as m
        union
        select 6 as m
        union
        select 7 as m
        union
        select 8 as m
        union
        select 9 as m
        union
        select 10 as m
        union
        select 11 as m
        union
        select 12 as m
    ) h 
) k     
on r.fundid = k.fid and r.filedate = k.filedate     
where       
    k.filedate >= convert(date,convert(varchar, year(@ReportDate) - 1) + '-12-01')  
    and k.filedate <= @ReportDate   
因此,我想在2016年报告申报表中添加“11-01”和“10-01”。有人知道我怎么做吗


提前谢谢。如果这不清楚或者有人有任何问题,请告诉我。

我会将您的查询改写为

;WITH months AS
(
    SELECT * FROM (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12)) AS f("month")
),
years AS 
(
    SELECT * FROM (VALUES (year(@ReportDate)), (year(@ReportDate)-1)) AS f("year")
),
fids AS
(
    SELECT * FROM (VALUES ('XXXXFDGBP10'), ('XXXXUSD10'), ('XXXXUSD10'), ('XXXXA10'), ('XXXXB10'), ('XXXXGBPMGMT10'), ('XXXXMGMTSH10')) AS f(fid)
),
k AS
(
    SELECT 
        filedate = DATEADD(month, [month]-1, DATEADD(year, [year]-1900, 0)), 
        fid
    FROM fids
    CROSS JOIN years
    CROSS JOIN months
)
SELECT  
    k.filedate, 
    k.fid,
    present = case when r.fundid is null then 0 else 1 end     
FROM XXXX r
RIGHT JOIN k ON r.fundid = k.fid and r.filedate = k.filedate
where       
    k.filedate >= convert(date,convert(varchar, year(@ReportDate) - 1) + '-10-01')  
    and k.filedate <= @ReportDate

你能不能把12换成10?这样的话,每次都会多做两个月。对于对这一建议反应迟缓,我深表歉意。不幸的是,这只是显示了2016-10年的日期,而不是2016-10、2016-11和2016-12,因此不起作用。