Tsql 联接结果不符合预期

Tsql 联接结果不符合预期,tsql,Tsql,我觉得问这个问题很可笑,但我已经盯着我的代码看了这么久,我看不出我遗漏了什么明显的答案: 使用AdventureWorks2016数据库,我有以下查询: declare @OrderFrequency table (CustomerID int, OrderYear int, OrderFrequency int) ;with OrderFrequency as ( Select CustomerID, datepart(month, OrderDate) Order

我觉得问这个问题很可笑,但我已经盯着我的代码看了这么久,我看不出我遗漏了什么明显的答案:

使用AdventureWorks2016数据库,我有以下查询:

declare @OrderFrequency table (CustomerID int, OrderYear int, OrderFrequency int)

;with OrderFrequency as
(

Select
      CustomerID,
      datepart(month, OrderDate) OrderMonth,
      datepart(year, OrderDate) OrderYear,
      cast(datepart(month, OrderDate) as nvarchar) +'/'+cast(datepart(year, OrderDate) as nvarchar) MonthYearCode
from Sales.SalesOrderHeader
group by CustomerID, datepart(month, OrderDate), datepart(year, OrderDate)

)
insert into @OrderFrequency
Select CustomerID, OrderYear, count(distinct MonthYearCode) OrderFrequency
from OrderFrequency
group by CustomerID, OrderYear
order by CustomerID, OrderYear


declare @CTETable table (CustomerID int, OrderTotal float, OrderMonth int, OrderYear int)
;with CTE as
(
Select
      CustomerID,
      sum(TotalDue) OrderTotal,
      datepart(month, OrderDate) OrderMonth,
      datepart(year, OrderDate) OrderYear
from Sales.SalesOrderHeader
group by CustomerID, datepart(month, OrderDate), datepart(year, OrderDate)

)
insert into @CTETable
select * from CTE

Select CTET.*
from @CTETable CTET
left outer join @OrderFrequency Ord on Ord.CustomerID = CTET.CustomerID
order by CTET.CustomerID, CTET.OrderYear
我的最后一个select语句将从CTET返回all,并从@OrderFrequency上的连接返回额外的行


是否应该我的CTET规范。*仅返回CTET?

如果Ord可以为每个CustomerID提供多行,那么您将从联接中获得比CTET更多的行。这是您的行集,无论您决定如何显示哪些列。无论您选择CTET.*还是选择Ord.*,行数都将保持不变

如果要减少该集合以消除由于左联接而在CTET列中复制的数据,可以选择distinct CTET.*


你加入的目的是什么?

我不知道你在说什么。当然,您可以从
CTET
中获得列,但每次成功加入都需要一行。。。插入一个不同的,你会看到不同。恐怕我也不明白<代码>CTET.*确定返回哪些列。您的
JOIN
决定返回哪些行。你们的差异在哪里?谢谢各位。我不知道为什么我在这件事上会有这么大的麻烦。谢谢莱娅。我的大脑停止工作了。我现在已经让它重新上线,并且运行正常。