SQL Server连接问题 脚本:

SQL Server连接问题 脚本:,sql,sql-server,join,group-by,Sql,Sql Server,Join,Group By,我正在尝试构建一个具有开始日期和结束日期的查询,该查询的结果为我提供了介于日期和日期名称之间的日期。然后,我想加入另一个表,该表包含预期的付款日期和金额。联接表的开始日期和结束日期范围之外的天数可能更多,我想排除这一范围 进展: 我有点像我想要的,但不是在正确的输出中,到目前为止,我已经创建了以下内容: DECLARE @startDate DATETIME, @endDate DATETIME SET @startDate = CONVERT(VARCHAR(4), DATEPART(YE

我正在尝试构建一个具有开始日期和结束日期的查询,该查询的结果为我提供了介于日期和日期名称之间的日期。然后,我想加入另一个表,该表包含预期的付款日期和金额。联接表的开始日期和结束日期范围之外的天数可能更多,我想排除这一范围

进展: 我有点像我想要的,但不是在正确的输出中,到目前为止,我已经创建了以下内容:

DECLARE 
@startDate DATETIME,
@endDate DATETIME

SET @startDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+CONVERT(VARCHAR(2), DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())))+'-21'
SET @endDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+CONVERT(VARCHAR(2), DATEPART(MONTH, DATEADD(MONTH, -0, GETDATE())))+'-20'
;WITH dates AS 
(
    SELECT @startdate as Date,DATENAME(Dw,@startdate) As DayName
    UNION ALL
    SELECT DATEADD(d,1,[Date]),DATENAME(Dw,DATEADD(d,1,[Date])) as DayName
    FROM dates 
    WHERE DATE < @enddate
)
SELECT LEFT(CONVERT(VARCHAR(30),Date, 106), 2) + '-' + LEFT(CONVERT(VARCHAR(30),Date, 10), 2) Date,DayName, SUM(ExpectedAmount), ExpectedDate FROM dates
FULL JOIN Commissions.dbo.ThreeMonthPayment on CONVERT(VARCHAR(30),Date) = Commissions.dbo.ThreeMonthPayment.ExpectedDate
GROUP BY Date, DayName, ExpectedDate
Order by ExpectedDate
在上面的结果中,我正在尝试将ExpectedDate与date列匹配,因此,我没有看到上面的结果,而是看到这样的结果:简而言之,我没有创建从开始日期和结束日期收到的所有日期

+-------+-----------+------------------+--------------+
| Date  |  DayName  | (No column name) | ExpectedDate |
+-------+-----------+------------------+--------------+
| NULL  | NULL      | 0                | NULL         |
| 21-03 | Friday    | 21074            | 21-03        |
| 22-03 | Saturday  | 28401            | 22-03        |
| 23-03 | Sunday    | 76562            | 23-03        |
| 24-03 | Monday    | 47008            | 24-03        |
+-------+-----------+------------------+--------------+
但是您可以在上面看到expectedDate和date列被很好地分组/连接在一起。并且不显示不在日期范围内的预期日期

我整个上午都在努力解决这个问题:这可能吗

任何帮助或链接到线程,我可能已经错过了将是伟大的

我正在使用SQLServer2008

非常感谢。

首先,完整连接包括所有内容。两张桌子都有。如果您只需要日期cte中的日期,请使用left join

其次,CONVERTVARCHAR30,Date=Commissions.dbo.ThreeMonthPayment.ExpectedDate似乎不起作用。您确定需要转换吗

我建议你试试这个:

DECLARE 
@startDate DATETIME,
@endDate DATETIME

SET @startDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+CONVERT(VARCHAR(2), DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())))+'-21'
SET @endDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+CONVERT(VARCHAR(2), DATEPART(MONTH, DATEADD(MONTH, -0, GETDATE())))+'-20'
;WITH dates AS 
(
    SELECT @startdate as Date,DATENAME(Dw,@startdate) As DayName
    UNION ALL
    SELECT DATEADD(d,1,[Date]),DATENAME(Dw,DATEADD(d,1,[Date])) as DayName
    FROM dates 
    WHERE DATE < @enddate
)
SELECT LEFT(CONVERT(VARCHAR(30),Date, 106), 2) + '-' + LEFT(CONVERT(VARCHAR(30),Date, 10), 2) Date
     , DayName, SUM(ExpectedAmount), ExpectedDate 
  FROM dates
  LEFT JOIN Commissions.dbo.ThreeMonthPayment 
    on Date = Commissions.dbo.ThreeMonthPayment.ExpectedDate
 GROUP BY 
       Date
     , DayName
     , ExpectedDate
 Order by 
       ExpectedDate

您应该创建一个sql小提琴,这样人们就可以玩这个了
DECLARE 
@startDate DATETIME,
@endDate DATETIME

SET @startDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+CONVERT(VARCHAR(2), DATEPART(MONTH, DATEADD(MONTH, -1, GETDATE())))+'-21'
SET @endDate = CONVERT(VARCHAR(4), DATEPART(YEAR, DATEADD(MONTH, -1, GETDATE())))+'-'+CONVERT(VARCHAR(2), DATEPART(MONTH, DATEADD(MONTH, -0, GETDATE())))+'-20'
;WITH dates AS 
(
    SELECT @startdate as Date,DATENAME(Dw,@startdate) As DayName
    UNION ALL
    SELECT DATEADD(d,1,[Date]),DATENAME(Dw,DATEADD(d,1,[Date])) as DayName
    FROM dates 
    WHERE DATE < @enddate
)
SELECT LEFT(CONVERT(VARCHAR(30),Date, 106), 2) + '-' + LEFT(CONVERT(VARCHAR(30),Date, 10), 2) Date
     , DayName, SUM(ExpectedAmount), ExpectedDate 
  FROM dates
  LEFT JOIN Commissions.dbo.ThreeMonthPayment 
    on Date = Commissions.dbo.ThreeMonthPayment.ExpectedDate
 GROUP BY 
       Date
     , DayName
     , ExpectedDate
 Order by 
       ExpectedDate