SQL Server разделить счетчик на 2 части для одного столбца? - PullRequest
1 голос
/ 22 октября 2019

Потратив много времени, пытаясь заставить этот запрос работать, я пришел сюда за помощью.

У меня есть набор данных, которые я хочу сосчитать. Но я хочу сосчитать в 2 отдельных столбца на основе условия

У меня есть следующие таблицы

CREATE TABLE [dbo].[DIM_DATUM](
[DATE_SK] [int] NULL,
[YEAR_NUMBER] [int] NULL,
[MONTH_NUMBER] [int] NULL,
[MONTH_NAME] [varchar](30) NULL,
[HOLIDAY] [varchar](27) NULL) ON [PRIMARY]


CREATE TABLE [dbo].[RIT](
[RideId] [bigint] NULL,
[DATE_SK] [int] NULL) ON [PRIMARY]

, и я хочу получить этот вывод из запроса

<table>
  <tr>
    <th>MONTH_NAME</th>
    <th>YEAR_NUMBER</th>
    <th>MONTH_NUMBER</th>
    <th>RidesYES</th>
    <th>RidesNO</th>
    <th>RidesALL</th>
  </tr>
  <tr>
    <td>JULY</td>
    <td>2017</td>
    <td>7</td>
    <td>100</td>
    <td>200</td>
    <td>300</td>
  </tr>
</table>

Через некоторое время поиска я мог бы найти этот запрос, который выполняет более или менее то, что я ожидаю

SELECT h.HOLIDAY, h.MONTH_NAME, h.YEAR_NUMBER, h.MONTH_NUMBER,
COUNT(CASE WHEN h.HOLIDAY!= 'NO' THEN 1 END) AS RidesYES,
COUNT(CASE WHEN h.HOLIDAY= 'NO' THEN 1 END) AS RidesNO,
COUNT(*) AS RidesALL
FROM FEIT_RIT f
JOIN DIM_DATUM h ON h.DATE_SK = f.DATE_SK
GROUP BY h.HOLIDAY, h.MONTH_NAME, h.YEAR_NUMBER, h.MONTH_NUMBER
ORDER BY h.YEAR_NUMBER, h.MONTH_NUMBER

Но это дает мне следующееобратный результат: Изображение вывода запроса

Итак, в общем, я хочу, чтобы оба результата первых двух строк были вместе в одной строке при группировании по месяцу или году. Это возможно? Это возможно с транзакцией или даже подзапросом? Если так, пожалуйста, помогите мне! Заранее спасибо

1 Ответ

1 голос
/ 22 октября 2019

Кажется, вам не нужен столбец holiday. И чтобы получить группировку по year - month, группируйте сначала по году, затем по месяцу.

SELECT h.MONTH_NAME,  h.YEAR_NUMBER, h.MONTH_NUMBER,
COUNT(CASE WHEN h.PUBLIEKE_FEESTDAG != 'NO' THEN 1 END) AS RidesYES,
COUNT(CASE WHEN h.PUBLIEKE_FEESTDAG = 'NO' THEN 1 END) AS RidesNO,
COUNT(*) AS RidesALL
FROM FEIT_RIT f
JOIN DIM_DATUM h ON h.DATE_SK = f.DATE_SK
GROUP BY h.YEAR_NUMBER,  h.MONTH_NAME,  h.MONTH_NUMBER
ORDER BY h.YEAR_NUMBER, h.MONTH_NUMBER
...