многократное добавление на основе значения даты одного месяца для нескольких таблиц - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь добавить 3 фильтра ко второму коду кода из приведенного ниже кода, чтобы получить счетчик по месяцам по годам, отфильтрованный по идентификатору состояния <>, региону и типу.Я новичок в SQL и просто не могу найти способ объединить оба кода, чтобы заставить его работать.Я потратил 5 часов, пытаясь найти решение.Любая помощь будет принята с благодарностью. Мне нужен подсчет даты, созданной из jd.OrganisationAddress, но для ее фильтрации мне нужно связать поле OrganisationID из jd.OrganisationAddress с идентификатором поля таблицы jd.Organisation, эта таблица имеет поле StatusID, которое ядолжно быть <> 4.Затем для поля типа я должен соответствовать jd.OrganisationOrganisationType.OrganisationID из таблицы jd.OrganisationOrganisationType. Мне нужно связать это с помощью jd.OrganisationOrganisationType.OrganisationTypeID = jd.OrganisationTygan..OrganisationType.Name) = 'Банк'));затем, наконец, для региона я должен связать его с адресной таблицей через jd.OrganisationAddress.AddressID = jd.Address.ID затем из таблицы адресов мне нужно сопоставить регион, связав jdAddress.countryID с JD.country_region.countryID затем jdcountry.region.regionID к идентификатору поля таблицы jd_region, а затем, если jd_Region.name = "Северная Америка"

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 

по годам (дата создана) ASC

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Я попробовал еще немного, чтобы понять, чего вы можете достичь, и найти для вас другой ответ (немного глядит в хрустальный шар, извините):

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);
0 голосов
/ 19 мая 2019

Ваш пример выглядит все еще немного странным для меня, но я думаю, что вам нравится достигать чего-то вроде этого:

(на основе базы данных 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...