SQL 服务器将同一列的计数器分成两部分?
SQL Server split counter into 2 parts for same column?
在尝试使此查询正常工作后浪费了很多时间,我来这里寻求帮助。
我有一组数据要统计。但我想根据条件
计入 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
但这给了我以下结果:
Image of query output
所以基本上,我希望在按月或年分组时将前 2 行的两个结果放在一行中。这可能吗?
这可能与事务甚至子查询有关吗?如果是这样,请帮帮我!
提前谢谢你
您似乎不需要 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
在尝试使此查询正常工作后浪费了很多时间,我来这里寻求帮助。
我有一组数据要统计。但我想根据条件
计入 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
但这给了我以下结果: Image of query output
所以基本上,我希望在按月或年分组时将前 2 行的两个结果放在一行中。这可能吗? 这可能与事务甚至子查询有关吗?如果是这样,请帮帮我! 提前谢谢你
您似乎不需要 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