【问题标题】:SQL Server split counter into 2 parts for same column?SQL Server 将同一列的计数器分成两部分?
【发布时间】:2020-02-18 02:28:26
【问题描述】:

在浪费了很多时间试图让这个查询工作之后,我来这里寻求帮助。

我有一组要计算的数据。但我想根据条件计入 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 行的两个结果放在一行中,同时按月或年分组。这可能吗? 这可能与事务甚至子查询有关吗?如果是这样,请帮帮我! 提前谢谢你

【问题讨论】:

  • 如何删除组中的假期和结果?

标签: sql count multiple-columns qsqlquery


【解决方案1】:

看来您不需要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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多