Sql server 基于多个表的一个日期-月份值进行多次添加
我试图在下面代码的第二段代码中添加3个过滤器 因此,我得到了按状态id、区域和类型过滤的年-月计数。我是SQL新手,只是找不到一种方法来合并这两个代码以使其工作。我花了5个小时试图找到一个解决方案。任何帮助都将不胜感激Sql server 基于多个表的一个日期-月份值进行多次添加,sql-server,Sql Server,我试图在下面代码的第二段代码中添加3个过滤器 因此,我得到了按状态id、区域和类型过滤的年-月计数。我是SQL新手,只是找不到一种方法来合并这两个代码以使其工作。我花了5个小时试图找到一个解决方案。任何帮助都将不胜感激 我需要一个从jd.OrganizationAddress创建的日期计数,但要过滤它,我需要将jd.OrganizationAddress中的字段OrganizationID链接到jd.Organization表字段ID,该表具有字段StatusID,我需要为4。然后,对于类型字段
我需要一个从jd.OrganizationAddress创建的日期计数,但要过滤它,我需要将jd.OrganizationAddress中的字段OrganizationID链接到jd.Organization表字段ID,该表具有字段StatusID,我需要为4。然后,对于类型字段,我必须从jd.OrganizationOrganizationType表中匹配jd.OrganizationType.OrganizationTypeId=jd.OrganizationType.ID,然后从jd.OrganizationType表中匹配jd.OrganizationType.OrganizationId,然后我需要jd.OrganizationType.Name='Bank';最后,对于该地区,我必须通过jd.OrganizationAddress.AddressID=jd.address.ID将其链接到地址表,然后从地址表中,我需要通过将jddress.countryID链接到jd.country\u region.countryID,然后将jd country.region.regionID链接到jd\u region表字段ID,然后如果jd\u region.name=North America来匹配该地区
SELECT
jd.Organisation.StatusID
, jd.Region.Name AS Region
, jd.OrganisationType.Name AS Type
FROM
jd.Region
, ((((jd.Organisation
INNER JOIN
jd.OrganisationAddress
ON
jd.Organisation.ID = jd.OrganisationAddress.OrganisationID)
INNER JOIN
jd.Address
ON
jd.OrganisationAddress.AddressID = jd.Address.ID)
INNER JOIN
jd.Country
ON
jd.Address.CountryID = jd.Country.ID)
INNER JOIN
jd.OrganisationOrganisationType
ON
jd.Organisation.ID = jd.OrganisationOrganisationType.OrganisationID)
INNER JOIN
jd.OrganisationType
ON
jd.OrganisationOrganisationType.OrganisationTypeID = jd.OrganisationType.ID
WHERE
(((jd.Organisation.StatusID)<>4)
AND
((jd.Region.Name)='North America')
AND
((jd.OrganisationType.Name)='Bank'));
select year(datecreated),
sum(case when month(datecreated) = 1 then 1 else 0 end) Jan,
sum(case when month(datecreated) = 2 then 1 else 0 end) Feb,
sum(case when month(datecreated) = 3 then 1 else 0 end) Mar,
sum(case when month(datecreated) = 4 then 1 else 0 end) Apr,
sum(case when month(datecreated) = 5 then 1 else 0 end) May,
sum(case when month(datecreated) = 6 then 1 else 0 end) Jun,
sum(case when month(datecreated) = 7 then 1 else 0 end) Jul,
sum(case when month(datecreated) = 8 then 1 else 0 end) Aug,
sum(case when month(datecreated) = 9 then 1 else 0 end) Sep,
sum(case when month(datecreated) = 10 then 1 else 0 end) Oct,
sum(case when month(datecreated) = 11 then 1 else 0 end) Nov,
sum(case when month(datecreated) = 12 then 1 else 0 end) Dec
from jd.OrganisationAddress
group by year(datecreated)
order
到yeardatecreated ASC时,您的示例对我来说仍然有点奇怪,但我认为您希望实现以下目标: 基于AdventureWorks2014数据库
SELECT
DATEPART(YEAR, ModifiedDate) AS [Year],
DATEPART(MONTH, ModifiedDate) AS [Month],
SUM(LineTotal) AS TurnOver
FROM [Sales].[SalesOrderDetail]
GROUP BY DATEPART(YEAR, ModifiedDate), DATEPART(MONTH, ModifiedDate)
我尝试了更多的方法来理解您可能想要实现的目标,并为您提供了另一个答案。这有点像水晶球,对不起:
WITH PreSelection AS (
SELECT
oa.datecreated
FROM OrganisationAddress oa
INNER JOIN Organisation o ON o.ID = oa.OrganisationID
INNER JOIN [Address] a ON oa.AddressID = a.ID
INNER JOIN Country c ON a.CountryID = c.ID
INNER JOIN [Region] r ON a.RegionID = r.ID
-- INNER JOIN [Region] r ON c.RegionID = r.ID
INNER JOIN OrganisationType ot ON o.OrganisationTypeID = ot.ID
WHERE o.StatusID <> 4
AND r.Name = 'North America'
AND ot.Name ='Bank'
)
SELECT
DATEPART(YEAR, datecreated) AS [Year],
DATEPART(MONTH, datecreated) AS [Month],
COUNT(*) AS RecordCount
FROM PreSelection
GROUP BY
DATEPART(YEAR, datecreated),
DATEPART(MONTH, datecreated);
抱歉,我无法真正理解您的问题。请参考如何创建一个最小的、可复制的示例,谢谢我编辑了这个问题来解释更多,或者这只是一个您喜欢做的计数?我需要一个从jd.organizationAddress创建的日期计数,但要过滤它